我正在使用 JOGL 进行游戏,但抛出以下错误:
Exception in thread "main-AWTAnimator#00" com.jogamp.opengl.util.AnimatorBase$UncaughtAnimatorException: com.jogamp.opengl.GLException: Caught InternalError: Immutable glNamedBufferStorage not supported yet on thread main-AWTAnimator#00 at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:92) at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:452) at com.jogamp.opengl.util.Animator$MainLoop.run(Animator.java:204) at java.lang.Thread.run(Thread.java:745) Caused by: com.jogamp.opengl.GLException: Caught InternalError: Immutable glNamedBufferStorage not supported yet on thread main-AWTAnimator#00 at com.jogamp.opengl.GLException.newGLException(GLException.java:76) at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1327) at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147) at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759) at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81) ... 3 more Caused by: java.lang.InternalError: Immutable glNamedBufferStorage not supported yet at jogamp.opengl.GLBufferObjectTracker.createBufferStorage(GLBufferObjectTracker.java:219) at jogamp.opengl.gl4.GL4bcImpl.glNamedBufferStorage(GL4bcImpl.java:40826) at rendering.Renderer.initBuffers(Renderer.java:182) at rendering.Renderer.init(Renderer.java:128) at jogamp.opengl.GLDrawableHelper.init(GLDrawableHelper.java:644) at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:690) at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674) at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443) at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293) ... 6 more
执行代码时会发生这种情况
gl4.glNamedBufferStorage(bufferName.get(Buffer.VERTEX), vertexBuffer.capacity() * Float.BYTES, vertexBuffer,
GL_STATIC_DRAW);
引发此错误的原因是什么以及如何解决此问题?
最佳答案
这是当前jogl的限制,我开了一个bug前段时间,不过由于Jogamp正在进行一些重组,所以短期内不会有什么改变。
解决方法非常简单,我们只需评论 this out
否则,只需将不可变存储与旧方式学校绑定(bind)一起使用:
gl4.glBindBuffer(GL_ARRAY_BUFFER, bufferName.get(Buffer.VERTEX));
gl4.glBufferStorage(GL_ARRAY_BUFFER, vertexBuffer.capacity() * Float.BYTES, vertexBuffer, 0);
gl4.glBindBuffer(GL_ARRAY_BUFFER, 0);
关于java - 主线程 AWTAnimator 尚不支持 JOGL Immutable glNamedBufferStorage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39366677/