是否可以使用 EXTERNAL_TEXTURE_OES 渲染到带有 TEXTURE_2D 的渲染缓冲区?

Is it possible to use EXTERNAL_TEXTURE_OES to render into renderbuffer with TEXTURE_2D?

我要在视频帧上绘制位图或文本。相框来自相机 GlUtil.TEXTURE_OES 但我的照片 GLES20.GL_TEXTURE_2D 组合它们的方法是渲染到帧缓冲区。据我所知,帧缓冲区不支持TEXTURE_OES

如何解决这种情况?

这些帧很可能是来自相机的 YUV420 格式。如果没有,您会发现其他公式可以使用片段着色器将它们动态转换为 RGB。这是我目前用于 YUV420 的片段着色器:

#ifdef GL_ES
precision mediump float;
#endif

uniform sampler2D u_texturey;
uniform sampler2D u_textureu;
uniform sampler2D u_texturev;
varying vec2 v_texcoord;
varying vec4 v_colorout;

void main(void)
{
    float y = texture2D(u_texturey, v_texcoord).r;
    float u = texture2D(u_textureu, v_texcoord).r - 0.5;
    float v = texture2D(u_texturev, v_texcoord).r - 0.5;
    vec4 rgb = vec4(y + 1.403 * v,
                    y - 0.344 * u - 0.714 * v,
                    y + 1.770 * u,
                    1.0);
    gl_FragColor = rgb * v_colorout;
}

YUV 有 3 个平面,所以将它们分别上传到它们的纹理单元,剩下的由 GPU 完成。

还有什么,尽管问。

编辑:

使用 GL_LUMINANCE 而不是 GL_RGBA 以平面格式上传每个纹理数据。