1

我有两个JOGL nativeGLWindow包裹在NewtCanvasAWT.

这些画布分别添加到JInternalFrames 中。JInternalFrames 被添加到JDesktopPanewhich 被添加到 a JFrame

我没有Animator运行,因为.display()在场景更改时手动调用。


除了一件事之外,此设置按预期工作:

  • 当第二个JInternalFrame(创建顺序)超过第一个时,第一个没有重新绘制,这是非常出乎意料的,

  • 当第一个移动到第二个时,第二个重新绘制,如预期的那样。

  • 如果我添加更多帧,则只有最后一个会按预期运行。

它们是相同的JInternalFrames(同一类)。

第一个GLWindow没有收到WindowUpdateEventWindowListener.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 线程进行渲染,而这些GLAutoDrawables 使用它。NEWT本机窗口工具包使用另一个线程。

4

1 回答 1

1

好的。这是JOGL 中的一个错误

我最终添加了一个监听器JDesktopPane,用于监听JInternalFrame添加。如果添加的框架包含GLWindow,它会记住在 a 中对它的引用List。它还ComponentListener每个 JInternalFrame. ///事件发生componentHiddencomponentMoved,所有之前记住的s都会被刷新componentResizedcomponentShownGLWindow

编辑:刷新是通过调用(继承自).display()上的方法来实现的。GLWindowGLAutoDrawable

于 2013-05-02T10:34:11.607 回答