2

我正在使用openGL。我的顶点和片段着色器在相互使用时可以正常工作,但是当我添加镶嵌着色器时,据说以前在程序中识别的制服在着色器中没有被引用。

这是我不知道的特殊性吗?

这是在我的 .cpp 中:

program = new Shader("tessVshader.glsl", "tessFshader.glsl", "tessGshader.glsl");
// Removed tesselation specific just to try to compile w/ geo shader
...
program->SetUniform("Modelview", model * view);
program->SetUniform("NormalMatrix", normalMatrix);

这是 tessGshader.glsl 的第一行:

uniform mat4 Modelview;
uniform mat3 NormalMatrix;
layout(triangles) in;
layout(triangle_strip, max_vertices = 3) out;

这是输出:

Uniform Modelview is not referenced in the shaders.
4

1 回答 1

0

Shader类是你写的吗?如果是的话,它的一些代码会很有帮助。如果正确创建了 GL 着色器对象,请确保在尝试访问制服之前调用了 glUseProgram(...)。否则openGL 将无法找到它们。顺便说一句,确保您可以在 glsl 代码中看到编译/链接时间错误。如果您还没有使用它,请查找函数 glGetInfoLog。

于 2012-12-07T00:15:36.783 回答