GLSL ......为什么要优化掉这个 unform(是吗?)
GLSL... why is this unform being optimized away (is it?)
我有一对 GLSL vertex/fragment 着色器。我正在尝试将一个组合矩阵传递给它进行转换,但是每当我在其上尝试 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");
总是returns -1。知道为什么吗?
它编译和链接很好,我可以毫无问题地获取“theSaturation”。 gComboMatrix 有什么问题?
添加说明:我还尝试了一些疯狂的事情,例如将颜色设置为等于 gComboMatrix[0] 以尝试向自己确认它没有被优化掉。仍然没有,总是-1。求助!
您的编译器很可能会识别出您的 VS 不会写入 gl_Position
,并且由于您没有设置任何转换反馈内容,因此执行它无法产生明确定义的行为.由于您的着色器无法用于渲染任何内容,因此编译器可能对其进行了优化。
或者它给出了一个您没有检查的编译错误。
我有一对 GLSL vertex/fragment 着色器。我正在尝试将一个组合矩阵传递给它进行转换,但是每当我在其上尝试 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");
总是returns -1。知道为什么吗? 它编译和链接很好,我可以毫无问题地获取“theSaturation”。 gComboMatrix 有什么问题?
添加说明:我还尝试了一些疯狂的事情,例如将颜色设置为等于 gComboMatrix[0] 以尝试向自己确认它没有被优化掉。仍然没有,总是-1。求助!
您的编译器很可能会识别出您的 VS 不会写入 gl_Position
,并且由于您没有设置任何转换反馈内容,因此执行它无法产生明确定义的行为.由于您的着色器无法用于渲染任何内容,因此编译器可能对其进行了优化。
或者它给出了一个您没有检查的编译错误。