Mac OS X中有任何方法可以在進程之間共享OpenGL幀緩衝區嗎?也就是說,我想在一個進程中渲染到屏幕外的目標,並將其顯示在另一個進程中。在Mac OS X的進程之間共享OpenGL幀緩衝區
你可以通過在共享模式下創建一個表面(一個OpenGL framebuffer的DXGI等效物),獲取該表面的不透明句柄,通過任何方式將它傳遞給另一個進程,從而在Windows中使用DirectX(實際上是DXGI)就像在另一個進程中創建一個表面,但是傳入現有的句柄。您可以在一個進程中將該表面用作渲染目標,然後將其用作另一個進程中的紋理以根據需要進行消耗。事實上,整個合成窗口系統從Vista開始就是這樣工作的。
如果這是不可能的,我當然可以獲取framebuffer的內容到系統內存中,並使用跨進程共享內存將其傳送到目標進程,然後再從那裏上傳它,但這是不必要的慢。
看起來就像票。我沒有意識到IOSurface API,但它看起來就像我想要的一樣(在進程之間共享GPU內存中的圖像)。順便說一句,因爲花了一分多鐘才發現,API文檔在這裏https://developer.apple.com/library/mac/documentation/Miscellaneous/Reference/IOSurfaceAPI_header_reference/Reference/reference.html#//apple_ref/doc/UID/TP40011198 – U62