调试VBO Vertex缓冲区崩溃
我正在使用VBO扩展来存储顶点,普通和颜色缓冲区(glBindBufferARB)
由于某些原因,在更改缓冲区或者执行某些操作时,应用程序会因访问冲突而崩溃。当连接调试器时,我看到崩溃发生在不是我的主线程的某个线程中,该线程执行与nvidia图形驱动程序相关的dll中的执行,执行opengl调用。
可能发生的情况是我给某些缓冲区调用了错误的缓冲区或者大小错误的缓冲区。所以我的问题是,我该如何调试这种情况?崩溃似乎发生在实际调用之后的某个时间,并且发生在另一个线程中。
解决方案
回答
我认为我们可能只需要暴力破解那个。
IE。一次用几行注释掉任何vbo,直到程序不再崩溃为止。然后,我们将了解要注意的行并真正检查要传递的参数。
还可以尝试在程序周围大量散布glError()调用。通常,如果我们传递假参数glError会在崩溃之前告诉我们一些错误。
回答
nVidia的NvPerfHUD是最好的OpenGl / D3D调试工具之一。它不会找到确切的问题,但是它确实提供了另一种视图,我们可以将其发送到渲染管道。
但是,我会说我只将其用于D3D应用程序,因此我不知道它对OpenGL程序是否有太大帮助。
编辑:
我不确定为什么这被否决了。我之前用NvPerfHUD调试了VB和IB问题。简单的事情,例如错误的原始计数,可以通过查看每个单独的绘图调用来进行诊断。
回答
假设这是关于Windows的,NVIDIA具有GLExpert工具。它可以打印各种OpenGL警告/错误。
在其他情况下,使用GLIntercept OpenGL调用拦截器并启用错误检查可能会很有用。
如果这些工具没有帮助,那很好,那就是旧的调试。尝试缩小问题范围,找到导致崩溃的确切原因。如果是NVIDIA特定的问题,请尝试安装其他驱动程序和/或者在NVIDIA开发人员论坛上提问。