如何在OpenGL ES和Vulkan之间传递纹理?

5

我需要将在OpenGL ES中生成的纹理传递到Vulkan,对其进行渲染,然后再传回OpenGL ES。有没有更快速的方法? 每帧都从GPU中读取并传递给CPU听起来对于实时Android应用程序来说太慢了。


有一些扩展可以让Vulkan访问OpenGL对象,前提是你的扩展支持它们。但考虑到Vulkan和OpenGL ES渲染相同的内容,使用相同的硬件,将这个Vulkan代码移植到OpenGL ES可能比尝试使用这种双重方法更好。 - Nicol Bolas
1个回答

7
在Android上,最广泛支持的方法是使用AHardwareBuffer、VK_ANDROID_external_memory_android_hardware_buffer和VK_KHR_external_semaphore_fd,结合VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT类型句柄。这些扩展目前还没有被广泛支持,但也没有其他替代品。不过,这是UI框架(通过Skia)将要使用的方法,因此它最终应该会变得普遍流行。
在OpenGL ES方面,您可以将AHardwareBuffer导入到EGLImage中(使用EGL_ANDROID_image_native_buffer),然后再导入到GL纹理中(使用GL_OES_EGL_image_external_essl3)。同步导入/导出可使用EGL_ANDROID_native_fence_sync完成。

这个答案有没有相关的示例? - LiShaoyuan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接