【问题标题】:How to use LWJGL in an Eclipse (RCP) application?如何在 Eclipse (RCP) 应用程序中使用 LWJGL?
【发布时间】:2011-12-10 23:41:18
【问题描述】:

我想在 Eclipse RCP 应用程序中使用 LWJGL,但是使用来自 http://lwjgl.org/update 的插件或手动将 jar 放入类路径并添加 Bundle-NativeCode 条目,我的应用程序在登录后在启动时挂起:

!ENTRY org.lwjgl 1 1 2011-12-11 00:27:11.122 !MESSAGE 将 org.lwjgl.librarypath 设置为 /Users/thsoft/Development/workspace/org.lwjgl/native/macosx,操作系统:mac os x(x86_64) 2011-12-11 00:27:11.144 java[43495:407] [Java CocoaComponent 兼容模式]:启用 2011-12-11 00:27:11.145 java[43495:407] [Java CocoaComponent 兼容模式]:将 SWT 的超时设置为 0.100000

在启动配置的 VM 参数中,我确实有 -Dorg.lwjgl.librarypath=/Users/thsoft/Development/MRP/org.lwjgl/native/macosx。

(我可以在纯 Java 项目中毫无问题地使用 LWJGL,该问题仅在插件项目的情况下出现。我在 OS X 10.7.2 上。)

有没有人成功使用 LWJGL 创建 RCP 应用程序?

【问题讨论】:

    标签: eclipse macos eclipse-rcp lwjgl


    【解决方案1】:

    GEF3D 使用 LWJGL 并在 OSX 上运行 - 所以理论上是可以做到的。我会查看特定于 lwjgl 的渲染器代码 - 请参阅 http://wiki.eclipse.org/GEF3D_Installation#Install_a_Renderer 了解一些小细节。

    遗憾的是,GEF3D 的文档很少,但也许是一个开始。

    【讨论】:

      【解决方案2】:

      这不是类路径问题,而是 SWT 应用程序上下文中 OpenGL 的错误使用。 我使用的是来自here的示例代码:

      try {
          Display.setDisplayMode(new DisplayMode(800,600));
          Display.create();
      } catch (LWJGLException e) {
          e.printStackTrace();
          System.exit(0);
      }
      
      // init OpenGL here
      
      while (!Display.isCloseRequested()) {
      
          // render OpenGL here
      
          Display.update();
      }
      
      Display.destroy();
      

      描述了一个正确用法的例子here:

          final Display display = new Display();
          Shell shell = new Shell(display);
          shell.setLayout(new FillLayout());
          Composite comp = new Composite(shell, SWT.NONE);
          comp.setLayout(new FillLayout());
          GLData data = new GLData ();
          data.doubleBuffer = true;
          final GLCanvas canvas = new GLCanvas(comp, SWT.NONE, data);
      
          canvas.setCurrent();
          try {
              GLContext.useContext(canvas);
          } catch(LWJGLException e) { e.printStackTrace(); }
      

      【讨论】: