对于 OpenGL 的学习,我指的是openglbook。目前在第 2 章中,我正在尝试运行粘贴在此处以供参考的代码。
我面临的问题是以下功能:
void CreateShaders(void)
{
GLenum ErrorCheckValue = glGetError();
VertexShaderId = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(VertexShaderId, 1, &VertexShader, NULL);
glCompileShader(VertexShaderId);
FragmentShaderId = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(FragmentShaderId, 1, &FragmentShader, NULL);
glCompileShader(FragmentShaderId);
ProgramId = glCreateProgram();
glAttachShader(ProgramId, VertexShaderId);
glAttachShader(ProgramId, FragmentShaderId);
glLinkProgram(ProgramId);
glUseProgram(ProgramId);
ErrorCheckValue = glGetError(); // =====> returns GL_INVALID_OPERATION
if (ErrorCheckValue != GL_NO_ERROR)
{
fprintf(
stderr,
"ERROR: Could not create the shaders: %s \n",
gluErrorString(ErrorCheckValue)
);
exit(-1);
}
}
如上function( glew.h
)所示,为什么会返回"GL_INVALID_OPERATION"
?
如果我评论这些行,那么它可以工作,但只会打印一个空白窗口。
这是我的glxinfo。由于我的版本是 2.2 并且此代码适用于 3.3+,因此我删除了以下代码以避免失败:
glutInitContextVersion(4, 0);
glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);
glutInitContextProfile(GLUT_CORE_PROFILE);
更新:在遵循@Tim 的回答建议后,我能够成功运行该程序;似乎这些行是创建问题:
“#version 400\n”(替换为“#version 130”)
和
布局(位置 = 0)(已删除)。布局(位置 = 1)(已删除)。
然而,由于这个原因,预期的三角形并不完全相同。可能本教程会考虑到最新的 opengl 版本,而我没有,这会产生问题。
有没有办法在不改变输出的情况下将代码从最新的 OpenGL (4.0+) 兼容代码修改为较低版本 (例如 < 3.0)?我将无法升级图形硬件。