OpenGL Vulkan 互操作性

标签 opengl interop vulkan

我需要一些关于 OpenGL-Vulkan 内存交换的帮助。
我已经找到了这个话题
How to render to OpenGL from Vulkan?
但这不是我所需要的。我不希望 Vulkan 分配和导出内存。我想将 OpenGL 内存导入 Vulkan,创建 Vulkan Image 并将其绑定(bind)到导入的内存。

我的问题是,实际上是否有可能获得可与 vk::ImportMemoryWin32HandleInfoKHR 一起使用的“HANDLE”(就 WinOS 而言)。

最佳答案

据我所知,目前还没有允许这样做的 OpenGL 扩展。这也有点道理,因为 OpenGL 分配对象的内存语义非常模糊,而且数据实际上可能到处都是。当您在 OpenGL 中创建纹理、缓冲区等时,它是完全开放的,最终分配内存的时间、方式和位置。

这在 Vulkan 中非常不同,内存管理是显式的,一旦创建,您就拥有“完美”的知识。也就是说,为什么可以简单地将内存“导入”到 OpenGL 对象中;就 OpenGL 驱动程序而言,它只是获取内存的另一种方式,只是这种方式不必担心脏细节。

最后,如果您使用 Vulkan 或 OpenGL 分配内存,它并没有实际的区别。只需使用 Vulkan 分配,然后导入 OpenGL。您仍然可以从 OpenGL 写入内存,即也可以将其用作渲染缓冲区或帧缓冲区附件的纹理。

关于OpenGL Vulkan 互操作性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54801580/

相关文章:

c - OpenGL矩形动画

windows - glFlush() 在具有透明背景的窗口上需要很长时间

c# - 为什么在 c#/c++ dll 互操作期间出现 System.AccessViolationException?

c# - 如何在没有互操作程序集的情况下创建 Microsoft Jet (Access) 数据库?

vulkan - "vkCreateSwapchainKHR:internal drawable creation failed."是什么意思

c++ - 为什么 vkCreateSwapchainKHR 会导致访问冲突?

c - linux 和 windows 速度不匹配

opengl - 是否可以使用自定义 mipmap 大小?

c# - 如何从 .NET 对 .NET 中定义的 COM 对象执行后期绑定(bind)调用(通过 DispID)?

c++ - 图形到图形深度依赖性,深度缓冲区被破坏