此代码在旧版OpenGL 3.0中运行良好,但在前向兼容模式下失败(我的设置为4.1和3.3)。我已经在硬件和软件实现上测试了它。我使用SDL来获取OpenGL上下文,并使用GLEW来查找一些函数。将下面的行添加到我的代码中会产生问题。
SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG);
代码中有问题的部分是调用glVertexAttribPointer
glBindBuffer(GL_ARRAY_BUFFER, glb.vbo);
glBufferData(
GL_ARRAY_BUFFER,
size * sizeof(GLfloat),
input,
GL_DYNAMIC_DRAW
);
test_gl_errors(); /* GL_NO_ERROR */
glUseProgram(glb.program);
glEnableVertexAttribArray(glb.vert_array);
glEnableVertexAttribArray(glb.colour_array); /* I use this later. */
test_gl_errors(); /* GL_NO_ERROR */
glVertexAttribPointer(
glb.vert_array,
2,
GL_FLOAT,
GL_FALSE,
5 * sizeof(GLfloat),
0
);
test_gl_errors(); /* GL_INVALID_OPERATION */
我想添加更多代码,但有很多东西。从下面的链接中读取信息对我没有帮助。有什么建议吗? https://www.opengl.org/sdk/docs/man/html/glVertexAttribPointer.xhtml
我的OpenGL设置:
答案 0 :(得分:1)
工作代码,基于Reto Koradi的评论。
glBindVertexArray(GL_ARRAY_BUFFER, glb.vao); /* <-- NEW !!! */
glBindBuffer(GL_ARRAY_BUFFER, glb.vbo);
glBufferData(
GL_ARRAY_BUFFER,
size * sizeof(GLfloat),
input,
GL_DYNAMIC_DRAW
);
glUseProgram(glb.program);
glEnableVertexAttribArray(glb.vert_array);
glVertexAttribPointer(
glb.vert_array,
2,
GL_FLOAT,
GL_FALSE,
5 * sizeof(GLfloat),
0
);
test_gl_errors(); /* GL_NO_ERROR */