2012-04-18 94 views
1

在游戏开始时我正在加载模型和东西,这需要一些时间,因此加载时会出现一个空白的黑屏。LWJGL中的OpenGL多线程(JAVA)

所以我想要做的是把所有的模型加载和显示列表创建到一个线程,并使(呈现)另一个加载。现在,我了解到OpenGL在多线程中不能很好地工作,而OpenGL命令只能从一个线程中调用,我的原始线程解决方案不起作用。两个线程都应该能够调用OpenGL命令:渲染和显示列表创建。

有没有人知道(熟悉)一个简单的解决方案呢? 与例子的一个很好的链接将做。

回答

2

您必须记住GL命令的解释模型是客户端服务器。也就是说,一个程序(客户端)发布命令,并且这些命令由GL(服务器)解释和处理 - (从规格中获取)。

所以你可以很容易地从两个线程的命令发送 - 这是没有问题的。但是通过玩多线程,如果你不知道自己在做什么,就会带来很大的蠕虫病毒。

加载时,我只是做一个加载屏幕,并在加载一些资源时更新它。并不是所有的东西都需要一个超级完美的解决方案 - 特别是这不是一个小问题:)

+0

“这没问题” - 当我从一个新线程调用GL11.glGenLists时,我得到null异常。这是蠕虫还是什么? – Vladp 2012-04-18 22:03:57

+0

我从来没有在java中做过OpenGL,我不明白为什么人们这样做。我非常喜欢java的工作,但是对于OpenGL C++来说,这似乎是很自然的选择 - 还有更多的资源。但请记住,您无法看到其他线程数据。 – Mads 2012-04-18 22:20:53

+0

我只能证明使用JOGL,但我没有太多关于引用的问题(这是一个非常薄弱的​​绑定)。 OpenGL的好处当然是速度和可移植性,Java的好处是程序的业务逻辑通常更容易编写。几乎没有什么折衷,但正如JOGL实现者所提到的,在C/C++实现方面观察到速度降低了10%。 – Quaternion 2012-04-18 23:19:31