我正在使用openGL。 我有顶点和片段着色器,当彼此使用时工作正常,但是当我添加tesselation着色器时,之前在程序中识别的制服据说在着色器中没有被引用。
这是我不了解的特异性吗?
这是我的.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.
答案 0 :(得分:0)
Shader课程是由你写的吗?如果是的话,它的一些代码会有所帮助。 如果正确创建了GL着色器对象,请确保在尝试访问制服之前调用glUseProgram(...)。否则openGL将无法找到它们。 顺便说一句,确保您可以在glsl代码中看到编译/链接时间错误。查看函数glGetInfoLog,如果你还没有使用它。