opengl 是否可以在进程之间共享纹理而不需要纹理的数据副本?

lhcgjxsq  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(140)

我认为它可以使用Vulkan的外部内存扩展来工作,方法是在进程A中分配内存,为该内存创建一个HANDLE,并通过共享内存将该HANDLE传递给进程B。
但这似乎是不可能的,因为HANDLE实际上只是一个void*,并且对于不同的进程存在不同的内存Map,因此指针/HANDLE实际上是不可在进程之间转移
有没有办法在不复制所有图像的像素数据的情况下(比如使用PBO),以某种方式获得句柄并在不同的过程中重新创建GL纹理/ VK图像?

rjzwgtxy

rjzwgtxy1#

要将HANDLE传输到不同的进程,请使用函数DuplicateHandle,它将创建一个重复的句柄,引用同一对象,但在另一个进程中。然后,您必须通过IPC的某种方式将新HANDLE的值(在原始进程中不可用)传递给另一个进程。你可以使用共享内存,或者发送消息,或者...任何允许你发送一个sizeof(void*)的整数,即以C a uintptr_t表示。然后,您只需将HANDLE转换为uintptr_t,然后将该数值发送到另一个进程,在那里您将其转换回HANDLE
您必须手动完成这一操作,因为没有任何机制来告知进程突然突然将一个全新的HANDLE魔法到他们的任务上下文中。

相关问题