使用核心配置文件交换缓冲区使用无效操作

时间:2014-09-22 14:30:44

标签: c++ opengl glut glfw freeglut

每当我调用一个函数来交换缓冲区时,我会从glDebugMessageCallback说出很多错误:

  

glVertex2f已从OpenGL Core上下文中删除(GL_INVALID_OPERATION)

我已尝试同时使用GLFW和freeglut,但两种方法都没有正常工作。

当然,我还没有使用glVertex2f。我甚至删除了所有渲染代码,看看我是否能找到导致它的原因,但错误仍然存​​在,就在glutSwapBuffers / glfwSwapBuffers之后。
使用单缓冲也不会导致错误。

我已将上下文初始化为4.3,核心配置文件和标记的前向兼容性。

2 个答案:

答案 0 :(得分:4)

正如评论中所解释的,这里的问题实际上是第三方软件,而不是您自己编写的任何代码。

当Steam覆盖或FRAPS等软件需要在OpenGL上绘制一些东西时,通常会在运行时将一些代码挂钩到应用程序的SwapBuffers实现中来解决这个问题。

您正在处理仍然使用立即模式绘制其叠加层的软件(RivaTuner),这是每个缓冲区交换上无法解释的弃用API调用的来源。

答案 1 :(得分:0)

您有可以分享的代码吗?要么驱动程序有问题,要么在您的过程中尝试调用glVertex。您可以尝试使用glloadgen来构建一个仅包含OpenGL-4.3符号的加载程序库(并且只包含那些符号),这样当链接程序时,使用4.3规范之外的符号会导致链接错误。