Debugging 调试VBO顶点缓冲区崩溃
我使用VBO扩展来存储顶点、法线和颜色缓冲区(glBindBufferARB) 由于某些原因,在更改缓冲区或执行某些操作时,应用程序会因访问冲突而崩溃。在安装调试器时,我看到崩溃是在某个线程中,而不是我的主线程,它执行与在英伟达图形驱动程序相关的一些DLL中执行的OpenGL调用。Debugging 调试VBO顶点缓冲区崩溃,debugging,opengl,vbo,Debugging,Opengl,Vbo,我使用VBO扩展来存储顶点、法线和颜色缓冲区(glBindBufferARB) 由于某些原因,在更改缓冲区或执行某些操作时,应用程序会因访问冲突而崩溃。在安装调试器时,我看到崩溃是在某个线程中,而不是我的主线程,它执行与在英伟达图形驱动程序相关的一些DLL中执行的OpenGL调用。 可能发生的情况是,我给一些缓冲区调用了一个坏的缓冲区或大小错误的缓冲区。所以我的问题是,如何调试这种情况?崩溃似乎发生在实际调用之后的某个时间,并且发生在不同的线程中。我认为您可能需要强制执行该线程。 也就是说,每次
可能发生的情况是,我给一些缓冲区调用了一个坏的缓冲区或大小错误的缓冲区。所以我的问题是,如何调试这种情况?崩溃似乎发生在实际调用之后的某个时间,并且发生在不同的线程中。我认为您可能需要强制执行该线程。 也就是说,每次使用几行注释掉任何vbo,直到您的程序不再崩溃。然后你会知道你的注意力应该集中在哪几行,并仔细检查你传递的参数
另外,还可以尝试在程序中随意地使用glError()调用。通常,如果你传递一个伪造的参数,glError会在它崩溃之前告诉你出了什么问题。最好的OpenGl/D3D调试工具之一是nVidia的NvPerfHUD。它不会帮助您找到确切的问题,但它确实提供了另一个视图,可以查看您正在向渲染管道发送的内容 然而,我要说的是,我只在D3D应用程序中使用过它,所以我不知道它对OpenGL程序是否有帮助 编辑:
我不知道这为什么会被否决。我以前用NvPerfHUD调试过VB和IB问题。简单的事情,例如错误的原语计数,可以通过查看每个单独的draw调用进行诊断。假设这是关于Windows的,NVIDIA有一个工具。它可以打印各种OpenGL警告/错误 在其他一些情况下,在启用错误检查的情况下使用OpenGL调用侦听器可能会很有用
如果这些工具没有帮助,那么这就是很好的旧调试。试着缩小问题范围,找出导致崩溃的确切原因。如果是NVIDIA特有的问题,请尝试安装不同的驱动程序和/或在NVIDIA开发者论坛上提问。NvPerfHUD实际上仅限于Direct3D,因此它对OpenGL没有任何用处,这正是问题所在。我猜这就是你被否决的原因。NvPerfHUD不是解决这个问题的相关工具。