2017-01-31 4 views
0

ビデオフレームにビットマップまたはテキストを描画します。フレームはカメラから来て、GlUtil.TEXTURE_OESですが、私の写真はGLES20.GL_TEXTURE_2Dです。 フレームバッファにレンダリングしています。わかっているように、TEXTURE_OESはフレームバッファによってサポートされていません。EXTERNAL_TEXTURE_OESを使用して、TEXTURE_2Dのレンダリングバッファにレンダリングすることはできますか?

この状況を解決するにはどうすればよいですか?

+1

フレームがカメラからのものである場合、フレームは通常YUV形式です。フラグメントシェーダをレンダリングするために、フラグメントシェーダを適用することができます。 – WLGfx

+0

したがって、私はそれらをTEXTURE_2Dとしてレンダリングすることができます。 @WLGfx、これについて深く読んでもらえますか? –

答えて

0

フレームは、カメラからYUV420形式である可能性が最も高いです。そうでない場合は、フラグメントシェーダーを使ってオンザフライでRGBに変換するための他の数式を見つけることができます。

#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は残りを行います。ここに私は現在、YUV420に使用するフラグメントシェーダです。

他にアンチエッシング、ちょうだい。

EDIT:

使用GL_LUMINANCE代わりに、それらの平面形式でテクスチャデータのそれぞれをアップロードするためGL_RGBA。

関連する問題