2012-12-16 26 views
5

我是着色器新手,我昨天開始玩弄其中的一些。他們蒐集罰款我的Windows PC上,但是當他們在Mac上跑,有兩個錯誤:Mac上的GLSL着色器錯誤,但不是Windows:無法從'const int'轉換爲'4分量浮點矢量'

ERROR: 0:14: '=' : cannot convert from 'const int' to '4-component vector of float'

在Android上只有第二着色器給我一個錯誤。它有上面的錯誤提到沒有匹配的函數點被重載。

它們使用相同的頂點着色器:

attribute vec4 a_position; 
attribute vec4 a_color; 
attribute vec2 a_texCoord0; 

uniform mat4 u_projTrans; 

varying vec4 vColor; 
varying vec2 vTexCoord; 

void main() { 
    vColor = a_color; 
    vTexCoord = a_texCoord0; 
    gl_Position = u_projTrans * a_position; 
} 

一個片段着色器(在Mac上的錯誤):

#ifdef GL_ES 
#define LOWP lowp 
precision mediump float; 
#else 
#define LOWP 
#endif 

varying LOWP vec4 vColor; 
varying vec2 vTexCoord; 
uniform sampler2D u_texture; 
void main() { 
    vec4 texColor = texture2D(u_texture, vTexCoord); 
    texColor.rgb = 1.0 - texColor.rgb; 
    gl_FragColor = texColor * vColor; 
} 

另一個片段着色器(在Mac和Android錯誤):

#ifdef GL_ES 
#define LOWP lowp 
precision mediump float; 
#else 
#define LOWP 
#endif 

varying LOWP vec4 vColor; 
varying vec2 vTexCoord; 
uniform sampler2D u_texture;    
void main() { 
    vec4 texColor = texture2D(u_texture, vTexCoord); 
    vec3 gray = vec3(0.2125, 0.7154, 0.0721); 
    vec4 color = dot(gray, texColor); 
    color.a = texColor.a; 
    gl_FragColor = color * vColor; 
} 
+0

什麼行什麼文件會導致這個錯誤? – Aaron

回答

4

在第一個着色器中,您在此行中有錯誤 - texColor.rgb = 1.0 - texColor.rgb;您需要編寫:

texColor.rgb = vec3(1.0) - texColor.rgb; 

在第二個着色器中,您在此行中有錯誤 - vec4 color = dot(gray, texColor);灰色是vec3,texcolor是vec4。什麼是vec3和vec4之間的點積?沒有這樣做的dot函數。您可以撥打float dot(vec3, vec3)float dot(vec4, vec4)。因此,改變該行:

vec4 color = vec4(dot(gray, texColor.rgb)); 

vec4 color = vec4(dot(vec4(gray, ???), texColor)); // put in ??? float number you want 

(下回請告訴我們在這行究竟發生錯誤)

+0

非常感謝。我會很樂意分享行號,但是這個錯誤是它吐出的唯一的東西。我不知道是否需要某種類型的探查器或其他方法來獲取更多信息。對不起,我無法提供更多。 – DustinRiley

相關問題