为什么GLSL“优化”这个着色器?

时间:2013-09-19 20:50:01

标签: opengl glsl

我有一个简单的着色器,我尝试将缩放和旋转应用到模型的坐标

#version 330

layout(location = 0) in vec3 VertexPosition;
layout(location = 1) in vec3 VertexNormal;
layout(location = 2) in vec2 VertexUV;

out VS_GS_VERTEX
{
    vec3 vs_worldpos;
    vec3 vs_normal;
    vec2 VertexUV;
} vertex_out;

uniform mat4 modelMatrix;
uniform mat4 projectionMatrix;
uniform mat4 lookAtMatrix;
uniform mat4 mdlScaleMatrix;
uniform mat4 mdlRotMatrix;

void main(void)
{
    mat4 mdlMat = mdlRotMatrix * mdlScaleMatrix;
    vec4 mdlPos = mdlMat * vec4(VertexPosition, 1.0);

    mat4 MVP = projectionMatrix * lookAtMatrix * modelMatrix;

    gl_Position = MVP * mdlPos;
    gl_Normal = mat3(modelMatrix) * VertexNormal;

    vertex_out.vs_worldpos = gl_Position.xyz;
    vertex_out.vs_normal = gl_Normal;
    vertex_out.VertexUV = VertexUV;
}

但出于某种原因,glGetUniformLocationmdlRotMatrix的{​​{1}}会返回mdlScaleMatrix。我可以看到其他制服的价值4-6。为什么会这样?我检查了名称并多次复制粘贴,在代码中发出错误以检查并得到编译错误(着色器与精确文件一起使用),因此名称和着色器完好无损。

0 个答案:

没有答案