JVM аварийно завершает работу с использованием JOGL, объектов буфера вершин и пытается освободить vbo в методе финализации

StackOverflow https://stackoverflow.com/questions/8406612

Вопрос

У меня есть написанное мной программное обеспечение САПР.Каждый рисуемый компонент имеет набор объектов буфера вершин.Если компонент удаляется, я должен освободить объекты буфера вершин в методе finalize, например:

родовое слово

однако я иногда получаю сбой SIGSEV и JVM.Файл журнала hs_err указывает на gl.glIsBufferArb (tmp.intValue ()).

Я считаю, что это означает, что мой объект gl больше не действителен?

Думаю, он должен был оставаться в силе.Программа работала до сбоя.Есть ли способ освободить glbuffer без сохранения ссылки на объект GL?

Спасибо!

Это было полезно?

Решение

Самая очевидная проблема, с которой вы здесь столкнетесь, заключается в том, что на контекст OpenGL можно ссылаться только в потоке, в котором он активен. Вообще говоря, это будет ваш поток рендеринга, что означает, что контекст OpenGL не будетдоступный в потоке финализатора JVM.Мне кажется, что это наиболее вероятная причина ваших ошибок.Я бы порекомендовал вам вести глобальный список недействительных VBO, а метод finalize добавлять в этот список идентификаторы.Затем вы можете периодически обрабатывать этот список из потоков рендеринга, делая вызовы OpenGL необходимыми для фактического удаления VBO.

Вы можете найти краткое изложение поведения OpenGL в многопоточной среде здесь .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top