【发布时间】:2023-03-15 18:51:02
【问题描述】:
我有一个 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 有什么问题?
补充说明:我还尝试了一些疯狂的事情,例如将颜色的 a 设置为等于 gComboMatrix[0] 以尝试向自己确认它没有被优化掉。仍然没有,总是-1。救命!
【问题讨论】:
标签: optimization glsl uniform