我有一个问题,就是我像在教程中一样编译和使用我的着色器,但 glAttachShader 不起作用我的返回值(如果我检查它)是 0,但编译成功。 谁能帮帮我?
这是我的代码的一部分:
fragment_shaderID = CompileShader("/home/nikolaij/Schreibtisch/MOTOR/shader.frag", 1000, GL_FRAGMENT_SHADER);
vertex_shaderID = CompileShader("/home/nikolaij/Schreibtisch/MOTOR/shader.vert", 1000, GL_VERTEX_SHADER);
shader_programID = makeShaderProgram(vertex_shaderID, fragment_shaderID);
shader_programID = glCreateProgram();
glAttachShader(shader_programID, fragment_shaderID);
glAttachShader(shader_programID, vertex_shaderID);
glLinkProgram(shader_programID);
int attach = 0;
glGetShaderiv(fragment_shaderID, GL_ATTACHED_SHADERS, &attach);
printf("ATTACH : %i\n", attach);
glUseProgram(shader_programID);
最佳答案
glGetShaderiv
函数不接受 GL_ATTACHED_SHADERS
作为参数。您应该得到一个 GL_INVALID_ENUM
错误,如果您使用 KHR_debug
(或一些替代方法,例如 glGetError()
),您会注意到该错误。
此外,着色器没有附加的着色器。只有程序有附加的着色器。这是更正后的版本:
int num_attached;
glGetProgramiv(shader_programID, GL_ATTACHED_SHADERS, &num_attached);
我强烈建议使用 KHR_debug
,因为您会立即发现错误。或者至少使用 glGetError()
,但这不会为您提供那么多信息。
关于c - OpenGL glAttachShader 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37122054/