从 SurfaceTexture 获取 OpenGL 纹理句柄

Get the OpenGL Texture Handle from a SurfaceTexture

SurfaceTexture 有一种设置纹理句柄的方法。 https://developer.android.com/reference/android/graphics/SurfaceTexture.html#attachToGLContext(int)

似乎没有办法获取纹理句柄,除非您可以控制可能已设置它的代码。

我正在尝试将底层 GL_TEXTURE_EXTERNAL_OES 纹理复制到 RGB GL_TEXTURE_2D,为此我需要知道纹理 ID。否则,我必须只调用 TextureView 上的 GetBitmap,它最终将 GPU 执行到 CPU,然后返回到 GPU 副本,如果我可以直接在 OpenGL 中复制,这应该是可以避免的。

您需要通过调用 glGenTextures() 在 OpenGL ES 上下文中创建纹理名称,然后调用 SurfaceTexture.attachToGLContext(int texName) 将外部图像绑定到该纹理名称。

脚注:完成后,您可以通过使用外部采样器在着色器中天真地使用 SurfaceTexture。对于大多数一次性使用的算法,不要将其转换为新纹理 - 这是对带宽和功率的浪费。