2014-08-29 5 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 является поплавок, 5 является INT, вы не можете сравнить как непосредственно.

Попробуйте написать 5.0 вместо:

if (texel.x > 5.0) 
+0

Я не знал, что! Ты узнаешь что-то новое каждый день. спасибо –

+1

GLSL полностью OpenGL делает неявные преобразования. Таким образом, исходный код будет легальным. В OpenGL ES для этих операторов нет неявных преобразований. –