在OS X(不同版本/配置文件)上的OpenGL上下文之间共享数据

Sharing data between OpenGL contexts on OS X (different version / profile)

本文关键字:OpenGL 上的 上下文 之间 数据 共享 配置文件 OS 版本      更新时间:2023-10-16

我需要在两个OpenGL上下文之间共享纹理数据,一个是核心配置文件(当前10.10 OS X的版本4.1),另一个是遗留文件(版本2.1)。遗留配置文件是由第三方库创建的。

Apple文档说要在上下文之间共享资源,它们必须是相似的(例如。相同的概要文件).

不是每个上下文都可以与其他上下文共享。两个上下文必须共享相同的OpenGL配置文件。

是否有其他方法可以避免内存传输?

(目前工作的解决方案是先下载纹理到CPU,然后在第二个上下文中重新上传到GPU,这是ok的,但非常慢…)

在OSX上,您可以使用IOSurface在不同的上下文(无论opengl配置文件)之间共享纹理。很容易。你创建一个IOSurface (IOSurfaceCreate),然后在两种情况下(使用CGLTexImageIOSurface2D)基于这个IOSurface创建纹理,我认为它们只是包装到相同的VRAM位置。So easy:-)

虽然有时您无法在上下文之间共享纹理,但您可以使用CopyImageSubDataNV将纹理从一个上下文中复制到另一个上下文中。

我不知道Mac上的OpenGL是否支持,但当我在做多gpu渲染时,我无法在上下文之间共享纹理,因为它们在两个不同的gpu上,但我将纹理从一个上下文复制到另一个上下文,这比手动传输到cpu并将其复制到另一个纹理要快得多。

可以在上下文之间共享所有OpenGL资源(甚至是shader或FBO)。对于更多的信息,我们应该考虑作为复制如何在Mac OS的NSOpenGLView和全屏上下文之间共享纹理?