OpenGL 纹理到 AHardwareBuffer

OpenGL textures into AHardwareBuffer

我在 Android 中遇到了 AHardwareBuffer。我想利用 AHardwareBuffer 来存储纹理,这样我就可以在没有 OpenGL 上下文的不同线程上使用它们。目前,我正在执行以下操作:

但是,我想要离开,这样我就不需要将它重新渲染到硬件缓冲区上,而是直接将纹理数据存储到硬件缓冲区上。

我正在考虑使用 glCopyTexImage2d 来执行此操作。这样可以吗?

另外(一个愚蠢的问题,但我无法克服)如果我将我的 EGLImage 从硬件缓冲区附加到 GL_TEXTURE_2D 并使用 glTexImage2D 定义纹理,它不会存储数据吗将作为 glTexImage2D 参数的纹理放入硬件缓冲区?

我使用 glSubTexImage2D 解决了这个问题。

首先创建一个opengl纹理并将其绑定到GL_TEXTURE_2D。 然后使用 glEGLImageTargetTexture2DOES 将纹理绑定到从 EGLClientBuffer 创建的 EGLImageKHR。这类似于 glTexImage2D。对 glTexImage2D 的任何后续调用都会破坏纹理和 EGLClientBuffer 之间的关系。

参考:https://www.khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external.txt

但是 glSubTexImage2D 保留了这种关系。因此我们可以用这个 API 加载数据并将其存储在 AHardwareBuffer.

PS:这可能是我的一种方式,如果有其他方式,我会接受答案。