【问题标题】:How are OpenGL programs debugged?OpenGL程序是如何调试的?
【发布时间】:2012-06-22 01:13:09
【问题描述】:

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

当我直接使用 OpenGL 调用时,程序运行良好。 但是当我将它们包装成两个类(正在建设中,vao 和 vbo)时,程序会出现段错误。

所以,在我的包装中,我肯定禁用了某些东西或设置了一些我不应该这样做的东西。

我的问题是,我如何获得一些诊断信息来帮助我查明问题的根源?

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

[我没有在此处发布代码,但如果你们中的任何人想通过测试段错误示例来贡献一些时间,here is a tar.gz of the source。您需要 sfml-2.0rc、glew 和 gcc>=4.6 的工作库。]

【问题讨论】:

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


    【解决方案1】:

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

    它可以让您轻松检查 OpenGL 的状态并为您提供良好的诊断。

    【讨论】:

    • 看起来很有趣,我试试看。 (而且看起来这将是一个很好的工具,可以顺利学习 OpenGL!)
    • 我试图让我的程序在其中运行很长一段时间,但它与我的操作系统的合作并不多。 (/usr/lib 和 /usr/lib64 问题,软链接没有解决)。下次遇到严重问题时,我会尝试让它运行。
    【解决方案2】:

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

    查看您如何在注释部分调用代码 - 首先是 glBufferData,然后才是 glVertexAttribPointer。

    【讨论】:

    • 谢谢,这就是问题所在。(在我完成对 VAO 的所有操作之前,我使用零参数调用 glBindVertexArray。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多