OpenGL 3.0 glVertexAttribPointer:遗留作品,前向兼容(核心)不

时间:2016-09-01 23:53:31

标签: c sdl-2 glew opengl-3

此代码在旧版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设置:

  • AMD CAPE VERDE上的Gallium 0.4(DRM 2.45.0 / 4.7.2-1-ck,LLVM 3.8.1)
  • llvmpipe上的Gallium 0.4(LLVM 3.8,128位)
  • Mesa3D:12.0.1

1 个答案:

答案 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 */