2

我最近参加了一个关于并行化的好处的讲座,它可以更有效地利用多核处理器的能力来实现实时 3D 图形应用程序。本次讨论是关于 C++ 和 TBB(线程构建块)(英特尔)。我在 Java 7 中发现了 Fork/Join,但我想了解更多关于通过 OpenGL / JOGL 运行实时 3d 图形的信息。

我听说 OpenGL/JOGL 必须存在于一个线程中。我不知道这是不是真的。如果您在 Java 中具有实时图形应用程序的并行/多核编程经验,并且可以向我指出一些非常棒的资源。

4

2 回答 2

3
Is JOGL restricted to one thread?

不,JOGL 本身并不绑定到一个线程。只有 AWT GLCanvas 是。后者是它的 GLAutoDrawable 实现之一。AWT GLCanvas 受到 AWT 本身的限制,需要操作本地资源才能在 AWT EDT 上运行。

How to work with JOGL lock free?

要“几乎”无锁地工作,您可以使用NEWT。NEWT 允许您从多个线程渲染多个窗口,同时它们不会相互阻塞......干扰等。NEWT 事件处理也不会干扰渲染。

Example of multithreading use

另一个使用 OpenGL 的多线程使用示例(无论是否使用 JOGL)是从一个持有共享的屏幕外 OpenGL 上下文 [w/ 屏幕上下文] 的专用线程填充纹理或其他 GL 相关资源。专用线程可以指示渲染循环可用资源等。看看我们的 GLDrawableFactory 是否有很多可绘制工厂方法是公共的。Note: offscreen mode can be selected via the GLCapabilities.

You may like to browse through out unit tests in one of thegit repos. Pls check class 'TestGLAutoDrawableGLWindowOnOffscrnCapsNEWT' and shared OpenGL context tests include the name 'Shared'.

于 2012-10-07T00:27:00.660 回答
0

您可以使用:

  1. 像素缓冲区或 pBuffer 是 OpenGL 的扩展,它允许进行离屏渲染
  2. 帧缓冲对象或 FBO
  3. 共享上下文(针对不同线程)

http://jogamp.org/git/?p=jogl.git;a=tree;f=src/test/com/jogamp/opengl/test/junit/jogl/offscreen;hb=HEAD

http://jogamp.org/git/?p=jogl.git;a=tree;f=src/test/com/jogamp/opengl/test/junit/jogl/demos/es2;hb=HEAD

于 2012-10-05T03:01:19.907 回答