Android Camera Preview data format 이 YCbCr_420_SP (NV21)  (one of Planar YUV Formats) 라고히지요.


camera preview width * height 만큼의 Y 바이트 그룹과 이어서 UV 그룹으로 되어있다고 그러네요.


OpenGL ES 2.0 에서 

이 YUV 데이터를 텍스쳐(들)로 설정하는 방법과 

Shader 에서 이 설정된 텍스쳐(들)들에서 RGB 로 변경하는 방법이 궁금합니다.


제가 여지껏 해매며 한 것은


camera preview width * height 만큼의 Y 바이트 그룹을 SamplerY 에

그 이후 UV 바이트 그룹을 SamplerUV 에 설정한겁니다. 


텍스쳐설정방법이 이상한건지...완전 칼라가 안나옵니다.



fragment shader 에서 


varying vec2 vTextureCoord;

uniform sampler2D SamplerY;

uniform sampler2D SamplerUV;


void main() {


vec3 yuv, rgb;

yuv.x = texture2D(SamplerY, vTextureCoord).r;

yuv.yz = texture2D(SamplerUV, vTextureCoord).rg - vec2(0.5, 0.5);


rgb = mat3(      1,       1,       1,

                     0, -.21482, 2.12798,

               1.28033, -.38059,       0) * yuv;


gl_FragColor = vec4(rgb, 1);


}