【发布时间】:2016-09-01 23:53:30
【问题描述】:
此代码在旧版 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 上的镓 0.4(DRM 2.45.0 / 4.7.2-1-ck,LLVM 3.8.1)
- llvmpipe 上的镓 0.4(LLVM 3.8,128 位)
- Mesa3D:12.0.1
【问题讨论】:
-
您拨打电话时是否绑定了VAO?它们在核心配置文件中是必需的。
-
@RetoKoradi 我添加了更多代码。
-
我仍然没有看到 VAO。在此之前的某处必须有
glGenVertexArray()和glBindVertexArray()调用。 -
坦克你。我已经添加了这两个函数,它可以工作。
-
@RetoKoradi 您想将此作为答案发布吗?