OpenGL Vulkan 互操作性
OpenGL Vulkan Interoperability
我需要一些有关 OpenGL-Vulkan 内存交换的帮助。
我已经找到了这个话题
但这不是我所需要的。我不希望 Vulkan 分配和导出内存。我想将 OpenGL 内存导入 Vulkan,创建 Vulkan Image 并将其绑定到导入的内存。
我的问题是,是否真的有可能获得可与 vk::ImportMemoryWin32HandleInfoKHR.
一起使用的 'HANDLE'(就 WinOS 而言)
据我所知,目前还没有允许执行此操作的 OpenGL 扩展。这也有点道理,因为 OpenGL 分配对象的内存语义非常模糊,数据实际上可能到处都是。当您在 OpenGL 中创建纹理、缓冲区等时,它是完全开放的,最终将在何时、如何以及在何处分配内存。
这在 Vulkan 中非常不同,在 Vulkan 中,内存管理是明确的,并且一旦创建,您就会 "perfect" 了解它。这就是为什么可以简单地 "import" 将该内存放入 OpenGL 对象;就 OpenGL 驱动程序而言,它只是获取内存的另一种方式,只是这种方式不必担心脏细节。
最终,如果您使用 Vulkan 或 OpenGL 分配内存,则不会产生实际差异。只需使用 Vulkan 分配,然后导入 OpenGL。您仍然可以从 OpenGL 写入内存,即将其用作帧缓冲区附件的渲染缓冲区或纹理。
我需要一些有关 OpenGL-Vulkan 内存交换的帮助。
我已经找到了这个话题
我的问题是,是否真的有可能获得可与 vk::ImportMemoryWin32HandleInfoKHR.
一起使用的 'HANDLE'(就 WinOS 而言)据我所知,目前还没有允许执行此操作的 OpenGL 扩展。这也有点道理,因为 OpenGL 分配对象的内存语义非常模糊,数据实际上可能到处都是。当您在 OpenGL 中创建纹理、缓冲区等时,它是完全开放的,最终将在何时、如何以及在何处分配内存。
这在 Vulkan 中非常不同,在 Vulkan 中,内存管理是明确的,并且一旦创建,您就会 "perfect" 了解它。这就是为什么可以简单地 "import" 将该内存放入 OpenGL 对象;就 OpenGL 驱动程序而言,它只是获取内存的另一种方式,只是这种方式不必担心脏细节。
最终,如果您使用 Vulkan 或 OpenGL 分配内存,则不会产生实际差异。只需使用 Vulkan 分配,然后导入 OpenGL。您仍然可以从 OpenGL 写入内存,即将其用作帧缓冲区附件的渲染缓冲区或纹理。