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

C OpenGL 3.0 glVertexAttribPointer:遗留作品,前向兼容(核心)不’;T,c,sdl-2,glew,opengl-3,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); 代码中有问题的部分是对glvertexattributepointer的调用 glBindBu

这段代码在传统OpenGL 3.0中运行良好,但在向前兼容模式(我的设置中为4.1和3.3)中失败。我已经在硬件和软件实现上进行了测试。我使用SDL获取OpenGL上下文,并使用GLEW查找一些函数。将下面的行添加到我的代码中会产生问题

SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG);
代码中有问题的部分是对glvertexattributepointer的调用

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 */
我想添加更多的代码,但是有很多东西。阅读下面链接的信息对我没有帮助。有什么建议吗?

我的OpenGL设置:

  • 佛得角AMD上的镓0.4(DRM 2.45.0/4.7.2-1-ck,LLVM 3.8.1)
  • LLVM管道上的镓0.4(LLVM 3.8128位)
  • Mesa3D:12.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 */

glBindVertexArray(GL_数组_缓冲区,glb.vao);/*你打电话时有VAO限制吗?它们在核心配置文件中是必需的。@RetoKoradi我已经添加了一些代码。我仍然没有看到VAO。在此之前,必须有
glGenVertexArray()
glbinvertexarray()
调用。谢谢。我已经添加了这两个函数,它很有效。@RetoKoradi您想把它作为答案发布吗?