OpenGL – 与未来的上下文共享现有的纹理?

我有一个应用程序,我使用FBO扩展画框到纹理。

然后,这些框架将显示在应用程序运行时打开的不同窗口中。 这意味着可以在创build任何新窗口的OpenGL上下文之前创build和汇集纹理,并wglShareLists

目前我必须做glReadPixelsglMapBufferRangeglTexSubImage把纹理移动到不同的窗口上下文中,效率相当低。

任何想法如何改善呢? 我应该创build多个(多达任何时候的最大数量的窗口〜4)程序启动过程中的OpenGL上下文和隐藏窗口? 那会是什么开销?

或者更好的是,有没有办法在现有和未来的 OpenGL上下文之间共享纹理?

Solutions Collecting From Web of "OpenGL – 与未来的上下文共享现有的纹理?"

在OpenGL上下文之间共享列表将共享封装缓冲区对象(纹理,顶点缓冲区对象,像素缓冲区对象)的所有数据,但不共享抽象集合对象(帧缓冲区对象,顶点数组对象)。 在创建新的上下文中的任何新的命名对象之前,创建共享是强制性的,因为在共享之前创建名称可能导致命名空间冲突。 已经创建的对象是共享的。 但是这当然需要小心,因为如果上下文A和B都具有ID = 1的纹理,会发生什么? 如果A有很多纹理和B none,那么A的纹理名称就可以转换成B了。 这是警告。

但是,如果您只想渲染到多个窗口:只要它们的PIXELFORMATDESCRIPTOR兼容,就可以在任意数量的窗口上使用单个OpenGL上下文。 这就是wglMakeCurrent的HDC参数的意思。 如果上下文严格绑定到一个窗口,wglMakeCurrent只有一个HRC参数。