Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 调试VBO顶点缓冲区崩溃_Debugging_Opengl_Vbo - Fatal编程技术网

Debugging 调试VBO顶点缓冲区崩溃

Debugging 调试VBO顶点缓冲区崩溃,debugging,opengl,vbo,Debugging,Opengl,Vbo,我使用VBO扩展来存储顶点、法线和颜色缓冲区(glBindBufferARB) 由于某些原因,在更改缓冲区或执行某些操作时,应用程序会因访问冲突而崩溃。在安装调试器时,我看到崩溃是在某个线程中,而不是我的主线程,它执行与在英伟达图形驱动程序相关的一些DLL中执行的OpenGL调用。 可能发生的情况是,我给一些缓冲区调用了一个坏的缓冲区或大小错误的缓冲区。所以我的问题是,如何调试这种情况?崩溃似乎发生在实际调用之后的某个时间,并且发生在不同的线程中。我认为您可能需要强制执行该线程。 也就是说,每次

我使用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不是解决这个问题的相关工具。