在OS X(不同版本/配置文件)上的OpenGL上下文之间共享数据
Sharing data between OpenGL contexts on OS X (different version / profile)
我需要在两个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和全屏上下文之间共享纹理?
相关文章:
- 无法在 OpenGL 上渲染具有不同 VAO 的不同网格
- 如何让 Flycheck(使用 clang_complete)识别 Mojave 上的 OpenGL 框架
- 如何使用CMAKE在Mac上链接与OpenGL相关的库
- 集成显卡上的 OpenGL 访问冲突
- 在OpenGL中的3D模型上创建AABB
- 在使用PI上的OpenGL ES绘制之前,如何旋转纹理
- 从相同纹理的撰写和读取OpenGL上的迭代de Solver
- OpenGL:MESA3D屏幕上的软件渲染性能问题
- Mac上的OpenGL损坏着色器
- QT QML 中的 OpenGL,无法更新屏幕上的图像
- 组合OpenGL和QML时,gldrawarrays上的segfault
- 什么是操作系统上的openGL ES实现
- Mac上的OpenGL版本
- 意外的glulookat行为,点在opengl上抽出
- 我正在尝试运行CUDA示例,但是我在Ubuntu 16.04 Lts上的OpenGL(libglew.a)有问题
- OpenGL GLut 与 Windows 8 64 位上的 Visual Studio 2013 链接问题
- OpenGl 2d 纹理重复(不同设备上的结果不同)
- OpenGL 上的多线程渲染
- 着色器GLSL OpenGL上的投影矩阵问题
- 处理三维对象opengl上的单击