Android:将 SurfaceTexture 附加到 FrameBuffer

Android: Attach SurfaceTexture to FrameBuffer

我正在执行需要双通道渲染的视频效果(纹理需要通过多个着色器程序)。将 SurfaceTexture 附加到构造函数中传递的 GL_TEXTURE_EXTERNAL_OES 似乎不是解决方案,因为显示的结果只渲染一次。

我知道的一个解决方案是可以对 FrameBuffer 进行第一次渲染,然后可以将生成的纹理渲染到实际显示的位置。

但是,SurfaceTexture 似乎必须附加到 GL_TEXTURE_EXTERNAL_OES 纹理,而不是 FrameBuffer。我不确定是否有解决方法,或者我是否应该采取其他方法。

谢谢。

SurfaceTexture 接收图形数据缓冲区,并将其包装为 "external" 纹理。如果有助于查看源代码,请从 updateTexImage() 开始。请注意 class ("GLConsumer") 的名称比 "SurfaceTexture" 更准确地描述了函数:它消耗图形数据帧并使它们可用于 GLES。

SurfaceTexture 预计可以使用 OpenGL ES "naturally" 无法使用的格式,尤其是 YUV,因此它始终使用外部纹理。