2017-01-31 5 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에 사용하는 프래그먼트 쉐이더입니다.

다른 개론을하면 질문하십시오.

편집 :

사용 GL_LUMINANCE 대신 자신의 평면 형식으로 텍스처 데이터의 각을 업로드 GL_RGBA.