Android:将SurfaceTexture附加到帧缓冲区

Android:将SurfaceTexture附加到帧缓冲区,android,opengl-es,shader,framebuffer,glsurfaceview,Android,Opengl Es,Shader,Framebuffer,Glsurfaceview,我正在执行需要双过程渲染的视频效果(纹理需要通过多个着色器程序)。将SurfaceTexture附加到在构造函数中传递的GL_TEXTURE_EXTERNAL_OES似乎不是解决方案,因为显示的结果只渲染一次 我知道的一个解决方案是,可以对帧缓冲区进行第一次渲染,然后将生成的纹理渲染到实际显示的位置 但是,似乎必须将SurfaceTexture附加到GL_TEXTURE_EXTERNAL_OES纹理,而不是帧缓冲区。我不确定是否有一个解决办法,或者是否有一个不同的方法,我应该采取 谢谢。Surf

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

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

但是,似乎必须将SurfaceTexture附加到GL_TEXTURE_EXTERNAL_OES纹理,而不是帧缓冲区。我不确定是否有一个解决办法,或者是否有一个不同的方法,我应该采取


谢谢。

SurfaceTexture接收图形数据缓冲区,并将其包装为“外部”纹理。如果有助于查看源代码,请从中开始。请注意,类的名称(“GLConsumer”)是比“SurfacetTexture”更准确的函数描述:它使用图形数据帧并使其可供用户使用


SurfaceTexture预计将使用OpenGL ES“自然”无法使用的格式,尤其是YUV,因此它始终使用外部纹理。

摄影机帧将进入SurfaceTexture,但图像帧的确切格式是什么?当我将图像绘制到MediaCodec的表面时,为什么编码器可以对帧进行编码而不会出现格式问题?系统集成商必须确保图形和视频组件相互作用。Android没有指定单一格式,只是GLES实现和视频编解码器需要能够共享缓冲区。(因此,
COLOR\u FormatSurface
,a/k/a
OMX\u COLOR\u FormatAndroidOpaque
…这在数据结构意义上是“不透明的”,而不是alpha透明度意义上)。这并不总是自动的,例如,GLES输出到MediaCodec需要
EGL\u RECORDABLE\u ANDROID
标志。您的意思是系统集成商必须实现外部oes opengl扩展吗?系统需要通过CTS,图形和视频之间的交互是测试套件的一部分。谁提供什么并不重要,只要各部分在最终产品中结合在一起。