繁体   English   中英

片段着色器:着色器中没有名称统一的着色器

[英]Fragment shader: No uniform with name in shader

我在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;

从着色器所有正常工作,但当我添加此行(功能上,我要使用此对象)并尝试设置一些数据时,我有错误。

我遇到的问题与您遇到的问题相同,但以下解决方案对我有用

使用浮动制服,像这样:

 int a = shader.getUniformLocation("u_aspectRatio");
 shader.setUniformf(a ,0.0f);

这是因为着色器编译器可以优化未使用的制服。 您可以忽略它。 如果不能,请使用可以的着色器程序类。

着色器编译器将优化未使用的制服,因此在运行时没有u_aspectRatio制服。 参见http://ogltotd.blogspot.com/2007/12/active-shader-uniforms-and-vertex.html

“修复”此着色器的另一种方法是在某处使用变量(例如,将v_texCoords乘以该变量)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM