android - 如何在 OpenGL ES 和 Vulkan 之间传递纹理?
问题描述
我需要将 OpenGL ES 中生成的纹理传递给 Vulkan,在上面渲染一些东西,然后传回 OpenGL ES。有没有快速的方法来做到这一点?对于实时 Android 应用程序来说,每帧读取到 cpu 并传递到 gpu 听起来太慢了。
解决方案
在 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完成。
推荐阅读
- math - 符号 $n\in\{0,1,2,...\} 和 $\n=0,1,2,...$ 有区别吗?
- passport.js - Facebook 战略与工兵和波尔卡
- apache-tika - 对于大于 2-3MB 的文件大小,Apache tika 解析非常慢
- python - Django 为同一子类别生成多个 url
- python - TypeError - 'int' 对象在 Lambda 函数中不可调用
- node.js - NodeJS:如何在用户身份验证后重置公用文件夹的缓存控制
- php - 在 WooCommerce 电子邮件通知上下载之前显示订单详细信息
- javascript - 我在使用 Axios 从我的 ReactNative 应用程序发送 FormData 并使用 multer 将其获取到我的服务器时遇到问题
- python - 如何在同一个图表tkinter上叠加多个图
- python - 选择用于 H2O 交叉验证的 nfolds 是否会改变使用的数据百分比?