我正在执行需要双 channel 渲染的视频效果(纹理需要通过多个着色器程序)。将 SurfaceTexture 附加到构造函数中传递的 GL_TEXTURE_EXTERNAL_OES 似乎不是解决方案,因为显示的结果只渲染一次。
我知道的一个解决方案是,可以对 FrameBuffer 进行第一次渲染,然后可以将生成的纹理渲染到它实际显示的位置。
但是,SurfaceTexture 似乎必须附加到 GL_TEXTURE_EXTERNAL_OES 纹理,而不是 FrameBuffer。我不确定是否有解决方法,或者我是否应该采取其他方法。
谢谢。
最佳答案
SurfaceTexture 接收一个图形数据缓冲区并将其包装为“外部”纹理。如果有助于查看源代码,请从 updateTexImage()
开始.请注意,类的名称(“GLConsumer”)是比“SurfaceTexture”更准确的功能描述:它消耗图形数据帧并使它们可用于 GLES。
SurfaceTexture 预计可以处理 OpenGL ES 不能“自然”处理的格式,尤其是 YUV,因此它总是使用外部纹理。
关于Android:将 SurfaceTexture 附加到 FrameBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35230984/