为了在SurfaceTexture上执行高斯模糊,我正在执行两次通过渲染,这意味着我将纹理通过一个着色器(水平模糊),然后通过另一个着色器(垂直模糊)。
我了解这背后的理论:将第一个纹理渲染到FBO,然后将第二个纹理渲染到SurfaceTexture本身。
有一些示例,但是似乎都不适用,因为SurfaceTexture在glBindTexture中使用GL_TEXTURE_EXTERNAL_OES作为目标,而不是GL_TEXTURE_2D。因此,在对glFramebufferTexture2D的调用中,GL_TEXTURE_2D不能用作textarget,并且我认为GL_TEXTURE_EXTERNAL_OES不能在此调用中使用。
谁能建议一种方法两次渲染纹理,最终渲染到SurfaceTexture?
重要更新:我正在使用SurfaceTexture,因为这是在表面上播放的视频的动态模糊。
编辑:这个问题被我误解了。 SurfaceTexture不是显示元素。相反,它从表面接收数据,并附加到GL_TEXTURE_EXTERNAL_OES。
谢谢。
最佳答案
渲染到SurfaceTexture在这里看起来很奇怪。 SurfaceTexture的重点是将发送到Surface的所有内容转换为GLES“外部”纹理。由于使用GLES进行渲染,因此您可以使用FBO进行第二遍渲染为GL_TEXTURE_2D
。
从摄像机或视频解码器接收帧时,将使用SurfaceTexture,因为其来源通常是YUV。 “外部”纹理格式允许更大范围的像素格式,但是限制了纹理的使用。如果您的目标是创建GLES纹理,则使用GLES渲染为SurfaceTexture没有任何价值。