【问题标题】:How to pass a texture between OpenGL ES and Vulkan?如何在 OpenGL ES 和 Vulkan 之间传递纹理?
【发布时间】:2019-11-20 00:57:44
【问题描述】:

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

【问题讨论】:

  • 有一些扩展允许 Vulkan 访问 OpenGL 对象,假设您的扩展支持它们。但鉴于 Vulkan 使用相同的硬件渲染与 OpenGL ES 相同的东西,将这个 Vulkan 代码移植到 OpenGL ES 可能比尝试使用这种双重方法更好。

标签: android 3d opengl-es rendering vulkan


【解决方案1】:

在 Android 上,最广泛支持的方法是使用带有VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT 句柄的 AHardwareBuffer、VK_ANDROID_external_memory_android_hardware_buffer 和 VK_KHR_external_semaphore_fd。这些扩展尚未得到广泛支持——但也没有任何替代方案——但这是 UI 框架(通过 Skia)将使用的,因此它最终应该会普及。

在 OpenGL ES 端,您可以将 AHardwareBuffer 导入 EGLImage (EGL_ANDROID_image_native_buffer) 并从那里导入 GL 纹理 (GL_OES_EGL_image_external_essl3)。使用EGL_ANDROID_native_fence_sync完成同步导入/导出。

【讨论】:

  • 这个答案有样本吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
相关资源
最近更新 更多