2017-10-04 114 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