JVM使用JOGL,顶点缓冲区对象并尝试通过finalize方法释放vbo导致崩溃
-
29-10-2019 - |
题
我已经编写了一些CAD软件。绘制的每个组件都有一组顶点缓冲区对象。如果组件被删除,则必须在finalize方法中释放顶点缓冲区对象,例如: 通用标签
但是有时我会遇到SIGSEV和JVM崩溃。hs_err日志文件指向gl.glIsBufferArb(tmp.intValue())。
我相信这意味着我的gl对象不再有效吗?
我认为它应该仍然有效。该程序仍在运行直到崩溃。有没有一种方法可以释放glbuffer而不存储对GL对象的引用?
谢谢!
解决方案
您将要遇到的最明显的问题是,OpenGL上下文只能在其处于活动状态的线程中进行引用。通常来说,这将是您的渲染线程,这意味着OpenGL上下文不会被在JVM的终结器线程中可用。在我看来,这很可能是您造成错误的原因。我建议您保留无效的VBO的全局列表,并让finalize方法向该列表添加ID。然后,您可以从渲染线程中定期处理该列表,从而进行实际删除VBO所需的OpenGL调用。
您可以在多线程环境中快速了解OpenGL的行为此处
不隶属于 StackOverflow