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

OpenGL 3.0 glVertexAttribPointer: legacy works, forward compatible (core) doesn’t

此代码在旧版 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 */

我想添加更多代码,但是有很多东西。阅读下面 link 中的信息对我没有帮助。有什么建议吗?
https://www.opengl.org/sdk/docs/man/html/glVertexAttribPointer.xhtml

我的 OpenGL 设置:

工作代码,基于 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 */