【问题标题】:OpenGL multithreading in LWJGL (JAVA)LWJGL (JAVA) 中的 OpenGL 多线程
【发布时间】:2012-04-18 21:42:37
【问题描述】:

在游戏开始时我正在加载模型和东西,这需要一些时间,因此在加载时会出现一个空白的黑屏。

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

有没有人知道(熟悉)一个简单的解决方案? 一个很好的例子链接就可以了。

【问题讨论】:

    标签: java multithreading lwjgl


    【解决方案1】:

    您必须记住解释 GL 命令的模型是客户端-服务器。也就是说,程序(客户端)发出命令,这些命令由 GL(服务器)解释和处理 - (取自规范)。

    因此,您可以轻松地从两个线程发送命令 - 这没问题。但是,如果您不知道自己在做什么,那么通过使用多线程,您将打开一个巨大的潜在蠕虫罐。

    在加载时,我会制作一个加载屏幕,并在加载一些资源时更新它。并非所有事情都需要一个超级完美的解决方案——尤其是这样的小事:)

    【讨论】:

    • “没问题” - 当我从新线程调用 GL11.glGenLists 时,我得到空异常。那是蠕虫还是什么?
    • 我从来没有在java中做过OpenGL,我不明白为什么人们会这样做。我喜欢 java 的工作等,但使用 OpenGL C++ 似乎是自然的选择——它还有更多的资源。但请记住,您看不到其他线程数据。
    • 我只能证明使用 JOGL,但我对引用没有太大问题(这是一个 非常 薄绑定,根本没有努力 OO)。 OpenGL 的好处当然是速度和可移植性,Java 的好处是程序的业务逻辑通常更容易编写。几乎没有折衷,但正如 JOGL 实现者所提到的,与 C/C++ 实现相比,速度降低了 10%。
    猜你喜欢
    • 1970-01-01
    • 2012-05-20
    • 2012-01-31
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    相关资源
    最近更新 更多