Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 基于OpenGl的UNIX多线程处理_Multithreading_Unix_Opengl - Fatal编程技术网

Multithreading 基于OpenGl的UNIX多线程处理

Multithreading 基于OpenGl的UNIX多线程处理,multithreading,unix,opengl,Multithreading,Unix,Opengl,我想在单独的线程中加载OpenGL应用程序的资源,以便创建加载屏幕,但当我尝试在另一个线程中调用OpenGL函数时,应用程序崩溃,我需要它们加载纹理。我可以使用多线程和OpenGL吗?或者我会说,每帧加载一个资源,让屏幕看起来有点起伏和糟糕?我知道您可以在Windows上实现这一点,但我更希望它在Unix(特别是MacOSX)上运行,而不是在Windows上运行。在不同线程中混用单个OpenGL上下文通常会导致麻烦。不过,您可以使用用于纹理更新的,将其映射到主(OpenGL)线程中,将映射指针传

我想在单独的线程中加载OpenGL应用程序的资源,以便创建加载屏幕,但当我尝试在另一个线程中调用OpenGL函数时,应用程序崩溃,我需要它们加载纹理。我可以使用多线程和OpenGL吗?或者我会说,每帧加载一个资源,让屏幕看起来有点起伏和糟糕?我知道您可以在Windows上实现这一点,但我更希望它在Unix(特别是MacOSX)上运行,而不是在Windows上运行。

在不同线程中混用单个OpenGL上下文通常会导致麻烦。不过,您可以使用用于纹理更新的,将其映射到主(OpenGL)线程中,将映射指针传递到要填充文件内容的加载线程,并在加载线程完成后取消映射PBO,然后在主线程中使用
glTexImage2D
(当然,使用PBO)。通过使用两个不同的PBO,一个当前由加载线程填充,另一个当前由主线程复制到纹理中,并进行适当的同步,您可以使文件加载和纹理更新同时工作(查看链接教程中的一些单线程示例).

在不同线程中处理单个OpenGL上下文通常会导致麻烦。不过,您可以使用用于纹理更新的,将其映射到主(OpenGL)线程中,将映射指针传递到要填充文件内容的加载线程,并在加载线程完成后取消映射PBO,然后在主线程中使用
glTexImage2D
(当然,使用PBO)。通过使用两个不同的PBO,一个当前由加载线程填充,另一个当前由主线程复制到纹理中,并进行适当的同步,您可以使文件加载和纹理更新同时工作(查看链接教程中的一些单线程示例).

所以我必须在同一个线程中运行它们,但这会更快?所以我必须在同一个线程中运行它们,但这会更快吗?