Android:将 SurfaceTexture 附加到 FrameBuffer

标签 android opengl-es shader framebuffer glsurfaceview

我正在执行需要双 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/

相关文章:

android - 网络提供商不在 android 中工作

android - Android 布局中的十六进制颜色值未准确显示

android - 直接从 .apk 文件下载 Android 应用程序

安卓 OpenGL : draw to half-sized screen resolution

Android OpenGL Hello World

java - 安卓 OpenGL ES : How do you select a 2D object?

opengl-es - 你可以用 GLSL ES 中的整数做什么?

opengl - 有没有超过 GL_MAX_VIEWPORTS 的有效方法?

android - 按钮不会改变其在选择器中的形状

ios - 设备和模拟器上的阴影不同