Отладка VBO Vertex буферы вылетает - PullRequest
2 голосов
/ 15 сентября 2008

Я использую расширение VBO для хранения буферов Vertex, Normal и Color (glBindBufferARB) По какой-то причине при изменении буфера или выполнении какой-либо операции приложение вылетает с нарушением прав доступа. При подключении отладчика я вижу, что сбой происходит в каком-то потоке, который не является моим основным потоком, который выполняет вызов opengl с выполнением в некоторой dll, связанной с графическим драйвером nvidia.

Вероятно, произошло то, что я дал некоторому вызову буфера неверный буфер или неправильный размер. Итак, мой вопрос, как мне отладить эту ситуацию? Кажется, что сбой произошел через некоторое время после фактического вызова и в другом потоке.

Ответы [ 3 ]

3 голосов
/ 16 сентября 2008

Предполагая, что это касается Windows, NVIDIA имеет инструмент GLExpert . Может печатать различные предупреждения / ошибки OpenGL.

В некоторых других случаях может быть полезным использование GLIntercept Перехватчик вызовов OpenGL с включенной проверкой ошибок.

Если инструменты не помогают, то это старая добрая отладка. Попробуйте сузить проблему и определить причину сбоя. Если это проблема NVIDIA, попробуйте установить другие драйверы и / или задать вопрос на форумах разработчиков NVIDIA.

0 голосов
/ 15 сентября 2008

Одним из лучших инструментов отладки OpenGl / D3D является nvidia NvPerfHUD. Это не поможет вам найти вашу точную проблему, но даст вам другое представление о том, что вы отправляете в конвейер рендеринга.

Тем не менее, я скажу, что я использовал его только с приложениями D3D, поэтому я не знаю, насколько это помогает в программах OpenGL.

EDIT:

Я не уверен, почему за это проголосовали. Я уже отлаживал проблемы с VB и IB с NvPerfHUD. Простые вещи, такие как плохие примитивные счеты и диагностирование, глядя на каждый отдельный розыгрыш.

0 голосов
/ 15 сентября 2008

Я думаю, что вам, возможно, придется просто перебить этого. То есть закомментируйте любой VBO, используя несколько строк за раз, пока ваша программа больше не падает. Тогда у вас будет представление о том, на какие строки следует обратить ваше внимание и как следует изучить параметры, которые вы передаете.

Также попробуйте распространить вызовы glError () свободно вокруг вашей программы. Часто, если вы передаете фиктивный параметр, glError сообщит вам, что что-то не так, прежде чем он достигнет точки сбоя.

...