java - 主线程 AWTAnimator 尚不支持 JOGL Immutable glNamedBufferStorage

标签 java opengl exception buffer jogl

我正在使用 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/

相关文章:

java - 为什么Thread.isInterrupted()总是返回false?

c# - Monogame 音效无法播放

opengl - GL_BLEND有什么用?

java - org.springframework.dao.InvalidDataAccessApiUsageException

安卓java.net.SocketException :socket failed: EACCES (Permission denied)

java - Canvas.drawBitmap 将源代码切成两半

java - 无法使用 poi mvc 在客户端生成下载 excel 文件

opengl - 带有 OpenGL 后端的浏览器引擎

delphi - 查找异常地址

java - 将 JPanel 添加到 JLayeredPane 会导致绘制和调整大小不起作用