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

时间:2015-08-26 11:17:19

标签: c++ macos opengl

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

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

  

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

还有另一种方法可以避免内存传输吗?

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

2 个答案:

答案 0 :(得分:2)

在OSX上,您可以使用IOSurface在不同的上下文(无论opengl配置文件)之间共享纹理。这很简单。你创建了一个IOSurface(IOSurfaceCreate),然后在两个上下文中使用这个IOSurface创建纹理(使用CGLTexImageIOSurface2D),我认为它们只是同一个VRAM位置的包装器。这么容易: - )

答案 1 :(得分:0)

可以在上下文之间共享所有OpenGL资源(甚至是着色器或FBO)。有关详细信息,我们应将其视为How to share textures between an NSOpenGLView and a full screen context in Mac OS?

的副本