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

时间:2017-01-31 14:45:52

标签: android opengl-es camera textures opengl-es-2.0

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

如何解决这种情况?

1 个答案:

答案 0 :(得分:0)

帧最有可能是相机的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有三个平面,所以每个平面上传到纹理单元,GPU完成其余的工作。

Anthing其他,请问。

编辑:

使用GL_LUMINANCE代替GL_RGBA以平面格式上传每个纹理数据。