我正在创建此平铺游戏,并且每个平铺重复使用相同的着色器,但为了使每个平铺块唯一,我将根据其位置将均匀值传递到平铺块中。
我已添加下面的粗略插图;
这是我的片段着色器
#ifdef GL_ES
precision lowp float;
#endif
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
uniform sampler2D CC_Texture0;
uniform float delta;
uniform vec2 resolution;
uniform vec2 position;
uniform vec2 modulesize;
uniform vec2 moduleoffset;
void main()
{
// just a test
if(moduleoffset.x > 100.0) {
// this never gets called
gl_FragColor = vec4(1.0,0.0,0.0,1.0);
} else {
gl_FragColor = vec4(0.0,1.0,0.0,1.0);
}
};
这是我分配制服的方法,这些方法是在构建完所有内容后调用的。
getShaderProgram()->use();
_shader->setUniformLocationWith2f(_shader->getUniformLocationForName("moduleoffset"), this->getPosition().x, this->getPosition().y);
_shader->setUniformLocationWith2f(_shader->getUniformLocationForName("modulesize"), _moduleSize.width, _moduleSize.height);
看起来非常简单,但我不确定为什么在if else语句中,moduleoffset.x> 100.0永远不会被调用/
答案 0 :(得分:1)
假设您正在使用OpenGL ES,则lowp精度限定符意味着该变量只能存储介于-2.0f和2.0f之间的数字。见precision qualifiers。将其更改为highp,希望能解决您的问题。