GLSL...为什么这个unform被优化掉了(是吗?)

时间:2021-03-13 01:53:56

标签: optimization glsl uniform

我有一个 GLSL 顶点/片段着色器对。我试图将一个组合矩阵传递给它以进行转换,但是每当我在它上面尝试 glGetUniformLocation 时,我都会得到 -1。

这是顶点着色器:

#version 300 es
precision mediump float;
uniform mat4 gComboMatrix;
layout (location = 0 ) in vec4 input_mXYZ;
layout (location = 1 ) in uint input_mColor;
layout (location = 2 ) in vec2 input_mUV;
out vec4 output_mXYZ;
out vec4 output_mColor;
out vec2 output_mUV;
void main()
{
  output_mXYZ=(input_mXYZ*gComboMatrix);
  output_mColor=(vec4(float(((input_mColor)&0x000000FFu))/255.0f,float(((input_mColor)&0x0000FF00u)>>8)/255.0f,float(((input_mColor)&0x00FF0000u)>>16)/255.0f,float(((input_mColor)&0xFF000000u)>>24)/255.0f));
  output_mUV=input_mUV;
}

这里是片段着色器:

#version 300 es
precision mediump float;
uniform sampler2D theTexture;
uniform float theSaturation;
in vec4 input_mXYZ;
in vec2 input_mTex1;
in vec4 input_mColor;
out vec4 output_mColor;
void main()
{
  vec4 aReal=texture(theTexture,input_mTex1)*input_mColor;
  float aGrey=(aReal.r+aReal.g+aReal.b)/3.0f;
  output_mColor.rgb=vec3(aGrey,aGrey,aGrey);
  output_mColor.rgb=mix(output_mColor.rgb,aReal.rgb,theSaturation);
  output_mColor.a=aReal.a;
}

所以:

glGetUniformLocation(glProgram,"gComboMatrix");

总是返回-1。知道为什么吗? 它编译和链接很好,我能够毫无问题地获取“theSaturation”。 gComboMatrix 有什么问题?

补充说明:我还尝试了一些疯狂的事情,例如将颜色设置为等于 gComboMatrix[0],以尝试向自己确认它没有被优化掉。仍然没有,总是-1。帮助!

1 个答案:

答案 0 :(得分:1)

很可能您的编译器认识到您的 VS 没有写入 gl_Position,并且由于您没有设置任何转换反馈内容,因此执行它不会导致明确定义的行为。由于您的着色器无法用于渲染任何内容,因此编译器可能会对其进行优化。

或者它给出了一个你没有检查的编译错误。

相关问题