片段着色器:着色器中没有带名称的制服

时间:2013-07-02 11:42:49

标签: opengl-es-2.0 glsl shader libgdx

我在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;
来自着色器的

一切正常,但是当我添加这一行时(在功能中我希望使用这个对象)并尝试设置一些数据我有错误。

3 个答案:

答案 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)。