LWJGL 3的glfwInit()
JavaDoc声明:
只能从主线程调用此函数。
但是,我已经在运行Windows 10的Acer机器上对此进行了测试,并且我发现调用哪个线程glfwInit()
并不重要,只要它是相同的任何其他glfw调用的线程。
文档是错误的,还是只适用于某些机器或操作系统?
答案 0 :(得分:3)
我发现在
上调用哪个线程glfwInit()并不重要
首先。仅仅因为某些东西似乎有效,并不意味着它会继续发挥作用。换句话说,某些特定事件可能最终导致您尚未测试的应用程序崩溃。
只能从主线程调用此函数。
这里重要的是GLFW documentation永远不会指定“主线程”的含义。
引用GLFW的开发人员和维护者Camilla Löwy / elmindreda。
Cocoa有一个事件队列,只能从主线程访问,大多数窗口操作都是如此。 Win32每个线程有一个事件队列,窗口绑定到创建它们的线程的队列。 X11具有单个队列,并且可以从任何线程完成事件处理和窗口操作。 GLFW施加的限制是确保程序可移植。没有强制执行此限制,即图书馆不会试图阻止您在脚下射击。 如果加载或渲染阻止您的程序,请将其放在另一个线程中。因此,在所有平台上渲染和交换缓冲区所需的一切都是线程安全的。
GLFW施加的限制是确保程序可移植。这种限制没有得到强制执行,即图书馆不会试图阻止你在脚下射击。
所以简而言之。可可不会幸福。但是在Windows上,假设窗口和OpenGL上下文是在同一个线程上创建的,那么应该没有任何问题。
但最终按规则播放更好确保程序是可移植的。