Multithreading 基于OpenGl的UNIX多线程处理
我想在单独的线程中加载OpenGL应用程序的资源,以便创建加载屏幕,但当我尝试在另一个线程中调用OpenGL函数时,应用程序崩溃,我需要它们加载纹理。我可以使用多线程和OpenGL吗?或者我会说,每帧加载一个资源,让屏幕看起来有点起伏和糟糕?我知道您可以在Windows上实现这一点,但我更希望它在Unix(特别是MacOSX)上运行,而不是在Windows上运行。在不同线程中混用单个OpenGL上下文通常会导致麻烦。不过,您可以使用用于纹理更新的,将其映射到主(OpenGL)线程中,将映射指针传递到要填充文件内容的加载线程,并在加载线程完成后取消映射PBO,然后在主线程中使用Multithreading 基于OpenGl的UNIX多线程处理,multithreading,unix,opengl,Multithreading,Unix,Opengl,我想在单独的线程中加载OpenGL应用程序的资源,以便创建加载屏幕,但当我尝试在另一个线程中调用OpenGL函数时,应用程序崩溃,我需要它们加载纹理。我可以使用多线程和OpenGL吗?或者我会说,每帧加载一个资源,让屏幕看起来有点起伏和糟糕?我知道您可以在Windows上实现这一点,但我更希望它在Unix(特别是MacOSX)上运行,而不是在Windows上运行。在不同线程中混用单个OpenGL上下文通常会导致麻烦。不过,您可以使用用于纹理更新的,将其映射到主(OpenGL)线程中,将映射指针传
glTexImage2D
(当然,使用PBO)。通过使用两个不同的PBO,一个当前由加载线程填充,另一个当前由主线程复制到纹理中,并进行适当的同步,您可以使文件加载和纹理更新同时工作(查看链接教程中的一些单线程示例).在不同线程中处理单个OpenGL上下文通常会导致麻烦。不过,您可以使用用于纹理更新的,将其映射到主(OpenGL)线程中,将映射指针传递到要填充文件内容的加载线程,并在加载线程完成后取消映射PBO,然后在主线程中使用glTexImage2D
(当然,使用PBO)。通过使用两个不同的PBO,一个当前由加载线程填充,另一个当前由主线程复制到纹理中,并进行适当的同步,您可以使文件加载和纹理更新同时工作(查看链接教程中的一些单线程示例).所以我必须在同一个线程中运行它们,但这会更快?所以我必须在同一个线程中运行它们,但这会更快吗?