我要在视频帧上绘制位图或文字。帧来自相机,GlUtil.TEXTURE_OES
但我的照片为GLES20.GL_TEXTURE_2D
组合它们的方法 - 渲染到帧缓冲区。据我所知,framebuffer不支持TEXTURE_OES
。
如何解决这种情况?
答案 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以平面格式上传每个纹理数据。