Ошибка OpenGL VBO, вызывающая выход из системы - PullRequest
1 голос
/ 25 мая 2011

Я использую JOGL для загрузки модели OBJ и отображения ее на холсте GL с использованием VBO.Все работает по большей части, однако, есть некоторые модели, где вершины должны быть деформированы.Например, у меня есть объект стрелки, и я должен иметь возможность деформировать стержень стрелки, чтобы хвост был длинным / коротким, насколько это необходимо, при сохранении геометрии объекта для наконечника стрелки.Это отлично работает для одного экземпляра рендерера, но когда я пытаюсь добавить еще один к сцене, система завершает вызов GLDrawElements и выводит этот журнал ошибок.Может кто-то указать мне верное направление?Я в полной растерянности.

    #
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000069e3e4c8, pid=6544, tid=2692
#
# JRE version: 6.0_21-b06
# Java VM: Java HotSpot(TM) 64-Bit Server VM (17.0-b16 mixed mode windows-amd64 )
# Problematic frame:
# C  [nvoglnt.dll+0x93e4c8]
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

...
Stack: [0x0000000052640000,0x0000000052740000],  sp=0x000000005273ecb0,  free space=3fb0000000000000000k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [nvoglnt.dll+0x93e4c8]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J  com.sun.opengl.impl.GLImpl.glDrawElements0(IIIJ)V
J  com.sun.opengl.impl.GLImpl.glDrawElements(IIIJ)V
j  com.sonogenics.model.AbstractModelHandler$Renderer.display(Ljavax/media/opengl/GL;)V+196
j  com.sonogenics.model.AbstractModelHandler$Renderer.display(Ljavax/media/opengl/GL;Lcom/sonogenics/camera/SimpleProjection;FFFLcom/sonogenics/playout/Field;)V+436
...

Ответы [ 2 ]

4 голосов
/ 25 мая 2011

Используйте GDebugger , чтобы увидеть, какой вызов вызывает ошибку, и проверить наличие недействительных данных в ваших вызовах gl.

Это довольно круто. :)

1 голос
/ 26 мая 2011

ACCESS_VIOLATION означает, что вы сказали GL читать память, которая находится за пределами «хороших» областей:)

В Drawelements есть несколько причин, по которым вы можете проверить, где вы устанавливаете буферы GL, а также что вы передаете в DrawElements.

  • -Одним из ваших буферов был неверный адрес, из-за чего он мог читать, кто знает где
  • - Одно из ваших смещений, шагов, было слишком долгим, заставляя GL выходить за рамки конец выделения
  • - Вы сказали, что количество вертов в модели было слишком длинным ... вызывая его выйти за пределы конца распределение
  • - Ваше распределение VBO было недостаточно большим для количества шагов * Verts
...