2014-08-29 43 views
0

我不能編譯以下片段着色器:簡單vec4.x的比較> 5

uniform vec3 color; 
uniform sampler2D tDiffuse; 
varying vec2 vUv; 

void main() { 
    vec4 texel = texture2D(tDiffuse, vUv); 
    vec3 luma = vec3(0.299, 0.587, 0.114); 
    float v = dot(texel.xyz, luma); 
    if (texel.x > 5) 
    gl_FragColor = vec4(v * color, texel.w); 
    else 
    gl_FragColor = texel; 
} 

如果更改(texel.x> 5)〜(1> 5)能正常工作。但不知何故texel.x會導致編譯錯誤。有沒有人看到這個代碼顯而易見的問題?

回答

3

texel.x浮動5INT,你不能直接比較兩者。

試着寫5.0代替:

if (texel.x > 5.0) 
+0

我不知道!你每天學習新的東西。謝謝 – 2014-08-29 16:14:02

+1

完全OpenGL中的GLSL會進行隱式轉換。那麼,原始代碼將是合法的。在OpenGL ES中,這些運算符沒有隱式轉換。 – 2014-08-30 04:00:22