首页 > 解决方案 > 如何在 OpenGL ES 和 Vulkan 之间传递纹理?

问题描述

我需要将 OpenGL ES 中生成的纹理传递给 Vulkan,在上面渲染一些东西,然后传回 OpenGL ES。有没有快速的方法来做到这一点?对于实时 Android 应用程序来说,每帧读取到 cpu 并传递到 gpu 听起来太慢了。

标签: android3dopengl-esrenderingvulkan

解决方案


在 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完成。


推荐阅读