如何调试OpenGL程序?

时间:2012-06-22 01:13:10

标签: c++ opengl segmentation-fault opengl-3

在我的简单程序中调用glDrawArrays(如gdb所说)时,我试图找到导致段错误的原因。

当我直接使用OpenGl调用时,程序运行正常。 但当我把它们分成两个类(正在构建中,vao和vbo)时,程序会出现段错误。

所以,在我的包装纸中,我绝对禁用某些东西或设置一些我不应该的东西。

我的问题是,如何获得一些有助于我找出问题根源的诊断信息?

我正在寻找类似于glGetShaderiv所做的事情,但是对于vao和vbo来说,这会告诉我我是否......错误地解除了缓冲区。

[我不是在这里发布代码,但是如果你们中的任何一个想通过测试一个segfaulting示例来捐赠一些时间,here is a tar.gz of the source。您需要使用sfml-2.0rc,glew和gcc> = 4.6的工作库。]

2 个答案:

答案 0 :(得分:4)

尝试像GDEBugger这样的程序:http://www.gremedy.com/

它允许您轻松检查OpenGL的状态并为您提供良好的诊断。

答案 1 :(得分:2)

调用glVertexAttribPointer时,必须对您的VBO数据进行分离。但是因为你之后调用它,之前调用的glVertexAttribPointer将指示VAO指向无效位置 - 因此在绘图期间崩溃。

了解如何在注释部分中调用代码 - 首先是glBufferData,然后是glVertexAttribPointer。