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 设置:
- 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
工作代码,基于 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 */
此代码在旧版 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 设置:
- 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
工作代码,基于 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 */