我需要将在 OpenGL ES 中生成的纹理传递给 Vulkan,在上面渲染一些东西,然后传递回 OpenGL ES。有没有快速的方法来做到这一点? 读取到 cpu 并传递给 gpu 每帧听起来对于实时 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 完成同步导入/导出.
关于android - 如何在 OpenGL ES 和 Vulkan 之间传递纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56970011/