這是我的着色器 'triangles.vert':glGetAttribLocation()返回-1,但變量是統一的,如何解決它?
#version 430 core
layout(location = 0) in vec4 vPosition;
layout(location = 1) in vec4 vColor;
uniform mat4 vRota;
out vec4 color;
void main()
{
color = vColor;
gl_Position = vRota * vPosition;
}
,這是C++源代碼的片段:
ShaderInfo shaders[] =
{
{ GL_VERTEX_SHADER, "triangles.vert" },
{ GL_FRAGMENT_SHADER, "triangles.frag" },
{ GL_NONE, NULL }
};
GLuint program = LoadShaders(shaders);
glUseProgram(program);
//...
int vRota_loc = glGetAttribLocation(program, "vRota");
if (vRota_loc == -1)
{
cout << "No uniform match for 'vRota'" << endl;
}
返回-1,但我不知道爲什麼。
我在着色器中做錯了什麼?
ps LoadShaders()
是編譯和鏈接着色器程序的函數。它是由我正在練習的一本書給出的源文件。所以我建議不會有錯誤。
制服在每個着色器階段都可用,這使得它們與頂點屬性完全不同。它們是程序範圍內的常量。 – 2015-02-23 17:02:25