我有一个应用程序,可以使用 FBO 扩展将帧绘制到纹理上。
然后这些帧将显示到打开的不同窗口while应用程序正在运行。这意味着可以在创建任何新窗口的 OpenGL 上下文之前创建和池化纹理,并且wglShareLists
叫做。
目前我必须做glReadPixels
, glMapBufferRange
and glTexSubImage
将纹理移动到不同的窗口上下文中,这是相当低效的。
关于如何改进这一点有什么想法吗?我是否应该在程序启动期间创建多个(与任何时间的最大窗口数 ~4 一样多)OpenGL 上下文和隐藏窗口?这样做的开销是多少?
或者更好的是,有没有一种方法可以使现有和现有的纹理共享futureOpenGL 上下文?
OpenGL 上下文之间的共享列表也将共享封装缓冲区对象(纹理、顶点缓冲区对象、像素缓冲区对象)的所有数据,但不共享抽象集合对象(帧缓冲区对象、顶点数组对象)。在新上下文中创建任何新的命名对象之前,必须创建共享,因为在共享之前创建名称可能会导致命名空间冲突。已创建的对象是共享的。但这当然需要预防措施,因为如果上下文 A 和 B 都有 ID=1 的纹理会发生什么?然而,如果 A 有很多纹理而 B 没有,那么 A 的纹理名称可以很好地转移到 B。这就是警告。
但是,如果您只想渲染到多个窗口:只要它们的 PIXELFORMATDESCRIPTOR 兼容,就完全可以在任意数量的窗口上使用单个 OpenGL 上下文。这就是 wglMakeCurrent 的 HDC 参数的用途。如果上下文严格绑定到单个窗口,则 wglMakeCurrent 只有一个 HRC 参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)