我最近参加了一个关于并行性的好处的讲座,它有助于更有效地利用多核处理器的强大功能,用于实时3D图形应用程序。这个讨论是关于C++和TBB(线程构建块)(英特尔)。我已经了解了Java 7中的Fork/Join,但我想了解更多关于通过OpenGL/JOGL运行实时3D图形的信息。
我听说OpenGL/JOGL必须存在于一个线程中。我不知道这是不是真的。如果你有关于实时图形应用程序的Java并行/多核编程的经验,并且可以为我指出一些非常棒的资源。
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)是从专用填充纹理或其他 GL 相关资源线程保存共享的屏幕外 OpenGL 上下文 [带屏幕上下文]。专用线程可以指示渲染循环可用资源等。看看我们的GLDrawable工厂有很多可绘制的工厂方法是公开的。 Note: offscreen mode can be selected via the GLCapabilities.
You may like to browse through out unit tests in one of the
git repos
.
Pls check class 'TestGLAutoDrawableGLWindowOnOffscrnCapsNEWT' and
shared OpenGL context tests include the name 'Shared'.
您可以使用:
- 像素缓冲区或pBuffer是OpenGL的扩展,允许进行屏幕外渲染
- 帧缓冲对象或 FBO
- 共享上下文(针对不同的线程)
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