来自非主线程的glfwInit()

时间:2017-04-08 01:11:18

标签: lwjgl glfw

LWJGL 3的glfwInit() JavaDoc声明:

  

只能从主线程调用此函数。

但是,我已经在运行Windows 10的Acer机器上对此进行了测试,并且我发现调用哪个线程glfwInit()并不重要,只要它是相同的任何其他glfw调用的线程。

文档是错误的,还是只适用于某些机器或操作系统?

1 个答案:

答案 0 :(得分:3)

  

我发现在

上调用哪个线程glfwInit()并不重要

首先。仅仅因为某些东西似乎有效,并不意味着它会继续发挥作用。换句话说,某些特定事件可能最终导致您尚未测试的应用程序崩溃。

  

只能从主线程调用此函数。

这里重要的是GLFW documentation永远不会指定“主线程”的含义。

引用GLFW的开发人员和维护者Camilla Löwy / elmindreda

  

Cocoa有一个事件队列,只能从主线程访问,大多数窗口操作都是如此。 Win32每个线程有一个事件队列,窗口绑定到创建它们的线程的队列。 X11具有单个队列,并且可以从任何线程完成事件处理和窗口操作。 GLFW施加的限制是确保程序可移植。没有强制执行此限制,即图书馆不会试图阻止您在脚下射击。   如果加载或渲染阻止您的程序,请将其放在另一个线程中。因此,在所有平台上渲染和交换缓冲区所需的一切都是线程安全的。

     

GLFW施加的限制是确保程序可移植。这种限制没有得到强制执行,即图书馆不会试图阻止你在脚下射击。

所以简而言之。可可不会幸福。但是在Windows上,假设窗口和OpenGL上下文是在同一个线程上创建的,那么应该没有任何问题。

但最终按规则播放更好确保程序是可移植的