我在libgdx中遇到片段着色器的问题。下面是我的片段着色器。
#ifdef GL_ES
precision mediump float;
#endif
uniform float u_aspectRatio;
varying vec2 v_texCoords;
uniform sampler2D u_texture;
void main()
{
gl_FragColor = texture2D(u_texture, v_texCoords);
}
在程序中我做
shader.setUniformi("u_texture", 0); // work fine
shader.setUniformf("u_aspectRatio", 0.0f); //no uniform with name 'u_aspectRatio' in shader
shader.isCompiled()返回true并首先设置工作正常,但在第二个我有错误“没有制服,名称'u_aspectRatio'在着色器中”。如果删除行:
uniform float u_aspectRatio;
来自着色器的一切正常,但是当我添加这一行时(在功能中我希望使用这个对象)并尝试设置一些数据我有错误。
答案 0 :(得分:2)
我遇到了同样的问题,但以下解决方案对我有用
使用float uniform像这样:
int a = shader.getUniformLocation("u_aspectRatio");
shader.setUniformf(a ,0.0f);
答案 1 :(得分:1)
那是因为着色器编译器优化掉了未使用的制服。你可以忽略它。如果你不能,那就使用一个着色器程序类。
答案 2 :(得分:1)
着色器编译器将优化掉未使用的制服,因此在运行时没有u_aspectRatio
制服。见http://ogltotd.blogspot.com/2007/12/active-shader-uniforms-and-vertex.html
“修复”此着色器的另一种方法是在某处使用变量(例如,乘以v_texCoords
)。