在Mac OS X中,有没有一种方法可以在进程之间共享OpenGL帧缓冲区?也就是说,我想在一个进程中渲染到屏幕外的目标,并在另一个进程中显示它。
在Windows中,您可以使用DirectX(实际上是DXGI)创建一个表面(相当于OpenGL帧缓冲区),并以共享模式获取该表面的不透明句柄,通过任何您喜欢的方式将其传递给另一个进程,然后在该进程中创建一个表面,但传递现有的句柄。您在一个进程中使用表面作为渲染目标,然后在另一个进程中将其用作纹理以按需使用。实际上,从Vista开始整个合成窗口系统都是这样工作的。
如果这不可能,我当然可以将帧缓冲区的内容放入系统内存中,并使用跨进程共享内存将其传递到目标进程,然后再从那里上传它,但这将是不必要的缓慢。
在Windows中,您可以使用DirectX(实际上是DXGI)创建一个表面(相当于OpenGL帧缓冲区),并以共享模式获取该表面的不透明句柄,通过任何您喜欢的方式将其传递给另一个进程,然后在该进程中创建一个表面,但传递现有的句柄。您在一个进程中使用表面作为渲染目标,然后在另一个进程中将其用作纹理以按需使用。实际上,从Vista开始整个合成窗口系统都是这样工作的。
如果这不可能,我当然可以将帧缓冲区的内容放入系统内存中,并使用跨进程共享内存将其传递到目标进程,然后再从那里上传它,但这将是不必要的缓慢。