0

我想在一个单独的线程中为我的 OpenGL 应用程序加载资产,这样我就可以创建一个加载屏幕,但是当我尝试在另一个线程中调用 OpenGL 函数时,应用程序崩溃了,我需要它们来加载纹理。无论如何我可以使用多线程和OpenGL吗?还是我要说,每帧加载一个资源,让屏幕有点不稳定和难看?我已经看到您可以在 Windows 上完成此操作,但我希望它能够在 Unix(特别是 MacOSX)上运行,而不是在 Windows 上运行。

4

1 回答 1

4

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

于 2013-07-19T14:58:03.090 回答