我正在努力让SWT使用最新的JOGL(2.0)。
我尝试了SWT snippet 209,但它不起作用。问题是由以下行引起的:
final GLContext context = GLDrawableFactory.getFactory().createExternalGLContext();
...但是当我将getFactory()
更改为getFactory(GLProfile.getDefault())
(使其与新API兼容)时,它会createExternalGLContext()
与javax.media.opengl.GLException: Error: current context null
崩溃。我不明白这个消息:我正在尝试创建一个新的上下文,它抱怨当前为空。为什么呢?
也许有其他方法可以创建GLContext
?
或者也许可以将GLEventListener
与SWT GLCanvas
一起使用?
PS。我放置了修改后的代码段here。
编辑:现在我理解了错误消息。 Documentation说:
在调用此方法时,底层OpenGL上下文必须是当前线程的当前上下文。
如何创建第一个GLContext
?
答案 0 :(得分:2)
简单方法:让渲染类实现GLEventListener
并将GLContext
创建代码移动到.init(...)
回调中(对于您发布的示例,它似乎是正确的位置)。然后将该侦听器添加到您用作显示小部件的任何GLCanvas
或类似内容中。
他们最近清理了JOGL,所以大多数例子在没有适当的按摩的情况下甚至都不能编译。如果您不熟悉它,可能需要回滚到旧版本,并且在启动时具有更高的代码示例兼容性。
答案 1 :(得分:0)
http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/上的教程展示了如何做到这一点。我从http://github.com/sgothel/jogl-demos/blob/master/src/demos/swt/Snippet209.java的JOGL2版本开始修改了SWT代码段209。
我的教程展示了如何将其作为Eclipse RCP应用程序(仅使用SWT,没有AWT桥接器)。要将其作为独立的SWT应用程序,请在https://sites.google.com/site/justinscsstuff/jogl-tutorials上有一个教程。