2017-10-04 95 views
0

所以MSDN說,你可以在兩個進程之間共享資源(堆): https://msdn.microsoft.com/en-us/library/windows/desktop/mt186623(v=vs.85).aspxOpenGL的進程間的GPU資源共享

是在OpenGL可能是一回事嗎?如果是這樣,我可以使用一些函數名稱或任何類型的起點爲我的搜索,因爲我還沒有發現任何東西。

請注意,我試圖避免將數據複製到系統內存並返回到同一設備,因爲這將是解決此問題的最微不足道的方法。

+0

你想用幾個線程或幾個應用程序或什麼與兩個不同的過程共享GPU內存或共享GPU內存? – Ripi2

+0

我想在兩個不同的進程(UE4和我的自定義應用程序)之間共享GPU內存。降低延遲是我最關心的問題。 –

回答

0

通常,GPU資源(紋理,着色器等)受其上下文約束。上下文然後綁定到他們的父進程。在Windows上的OpenGL上下文之間共享數據的方法(請參見wglShareList),但這可能很困難。

您可能想要考慮只使用多個上下文。如果您必須在上下文之間共享數據,則可以使用PBO從GPU - > CPU(複製紋理數據塊CPU /父進程的其他方法)異步複製數據,然後將其複製回其他上下文。效率低下,但沒有簡單的方法來做到這一點。

+0

共享gl-contexts並不難。大多數API(GLFW,SDL等)只需要在上下文/窗口創建時使用正確的標誌。它們共享大部分GPU RAM緩衝區和程序。 – Ripi2

+1

是的,但不在父進程之間,只是在「Windows」之間:http://www.glfw.org/docs/latest/context_guide.html。 OP詢問在進程*之間共享GPU資源*,而不是在同一進程內。 –

+0

製作共享上下文。由於UE4是開源的,你可以深入研究GL模塊,甚至可以看到它們是如何實現的。是的,UE4本身在渲染API中使用多個上下文 –

0

我不知道跨進程,但你可以在兩個不同的線程之間共享上下文,並通過共享opengl上下文,你可以創建資源並與線程共享。

參考文獻見

OpenGL Multithreading Sharing Context