2017-04-08 139 views
1

glfwInit()的JavaDoc LWJGL 3种状态:glfwInit()从非主线程

此功能必须只从主线程调用。

不过,我运行Windows 10 acer的机器上进行了测试,我发现它并不重要线索glfwInit()叫上,只要是同一个线程任何其他GLFW调用。

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

回答

2

我发现,它并不重要线索glfwInit()调用

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

该功能只能从主线程调用。

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

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

可可有一个单一的事件队列,只能从主线程访问,对大多数窗口操作也一样。 Win32每个线程有一个事件队列,窗口与创建它们的线程的队列绑定。 X11有一个单一的队列,事件处理和窗口操作可以从任何线程完成。 GLFW强加的限制是确保程序是可移植的。这个限制是不被强制执行的,即图书馆不会阻止你在脚下射击自己。 如果加载或渲染阻塞你的程序,把它放在另一个线程中。出于这个原因,你需要渲染和交换缓冲区的所有东西都是线程安全的。

GLFW强加的限制是确保程序是可移植的。这个限制是不被强制执行的,即图书馆不会阻止你在脚下射击自己。

简而言之。可可不会高兴。但是,在Windows上,如果窗口和OpenGL上下文是在同一个线程上创建的,那么就不会有任何问题。

但是最后发挥规则确保程序是可移植的