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