ron*_*nag 2 c c++ windows opengl
我有一个应用程序,我使用FBO扩展将帧绘制到纹理.
这些帧随后被显示给被打开不同的窗口,而该应用程序正在运行.这意味着可以在创建和wglShareLists调用任何新窗口的OpenGL上下文之前创建和合并纹理.
目前我必须这样做glReadPixels,glMapBufferRange并将glTexSubImage纹理移动到不同的窗口上下文中,这是相当低效的.
关于如何改进的任何想法?我应该在程序启动期间创建多个(在任何时候~4的最大窗口数)OpenGL上下文和隐藏窗口吗?那会有什么开销呢?
或者更好的是,有没有办法在现有和未来的 OpenGL上下文之间共享纹理?
dat*_*olf 11
OpenGL上下文之间的共享列表将共享封装缓冲区对象的所有数据(纹理,顶点缓冲区对象,像素缓冲区对象),但不共享抽象集合对象(帧缓冲对象,顶点数组对象).在新上下文中创建任何新命名对象之前,必须创建共享,因为在共享之前创建名称可能会导致命名空间冲突.已经创建的对象是共享的.但这当然需要预防措施,因为如果上下文A和B都有ID = 1的纹理会发生什么?但是,如果A有很多纹理而B没有,那么A的纹理名称可以很好地转移到B. 这是警告.
但是,如果您只想渲染到多个窗口:只要它们的PIXELFORMATDESCRIPTOR兼容,就可以在任意数量的窗口上使用单个OpenGL上下文.这就是wglMakeCurrent的HDC参数的意思.如果上下文严格绑定到单个窗口,则wglMakeCurrent只有一个HRC参数.