我有两个JOGL nativeGLWindow
包裹在NewtCanvasAWT
.
这些画布分别添加到JInternalFrame
s 中。JInternalFrame
s 被添加到JDesktopPane
which 被添加到 a JFrame
。
我没有Animator
运行,因为.display()
在场景更改时手动调用。
除了一件事之外,此设置按预期工作:
当第二个
JInternalFrame
(创建顺序)超过第一个时,第一个没有重新绘制,这是非常出乎意料的,当第一个移动到第二个时,第二个被重新绘制,如预期的那样。
如果我添加更多帧,则只有最后一个会按预期运行。
它们是相同的JInternalFrames
(同一类)。
第一个GLWindow
没有收到WindowUpdateEvent
。WindowListener.windowRepaint()
第二个可以。
这是我工作GLEventListener.display(GLAutoDrawable drawable)
时的堆栈跟踪: JInternalFrame
java.lang.IllegalArgumentException: test
at edu.agh.tunev.ui.opengl.Scene.display(Scene.java:42)
at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:373)
at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:358)
at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:280)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:655)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:594)
at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:543)
at jogamp.opengl.GLAutoDrawableBase.defaultWindowRepaintOp(GLAutoDrawableBase.java:99)
at com.jogamp.newt.opengl.GLWindow.access$000(GLWindow.java:94)
at com.jogamp.newt.opengl.GLWindow$1.windowRepaint(GLWindow.java:107)
at jogamp.newt.WindowImpl.consumeWindowEvent(WindowImpl.java:2392)
at jogamp.newt.WindowImpl.consumeEvent(WindowImpl.java:1943)
at jogamp.newt.DisplayImpl.dispatchMessage(DisplayImpl.java:388)
at jogamp.newt.DisplayImpl.dispatchMessages(DisplayImpl.java:436)
at jogamp.newt.DisplayImpl$DispatchMessagesRunnable.run(DisplayImpl.java:371)
at jogamp.newt.DefaultEDTUtil$EventDispatchThread.run(DefaultEDTUtil.java:293)
这也应该发生在第一帧。为什么不呢?
GLJPanel
使用or时,这一切都不会发生GLCanvas
。但是,我不想使用 AWT 线程进行渲染,而这些GLAutoDrawable
s 使用它。NEWT
本机窗口工具包使用另一个线程。