我需要在两个OpenGL上下文之间共享纹理数据,一个是核心配置文件(当前10.10 OS X上的版本4.1),另一个是遗留版本(版本2.1)。旧版个人资料由第三方库创建。
Apple documentation说要在上下文之间共享资源,它们必须相似(例如,相同的配置文件)。
并非每个上下文都可以与其他所有上下文共享。两个上下文必须共享相同的OpenGL配置文件。
还有另一种方法可以避免内存传输吗?
(目前工作的解决方案是首先将纹理下载到CPU,然后在第二个上下文中重新上传到GPU,这很好但很慢......)
答案 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?
的副本