Advertisement
mnuriev

Untitled

Feb 26th, 2020
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.92 KB | None | 0 0
  1. //
  2. // Simple passthrough fragment shader
  3. //
  4. varying vec2 v_vTexcoord;
  5. varying vec4 v_vColour;
  6. uniform sampler2D v_chroma;
  7.  
  8. //RBG to YUV
  9. //Y = 0.257 * R + 0.504 * G + 0.098 * B + 16;
  10. //U = -0.148 * R - 0.291 * G + 0.439 * B + 128;
  11. //V = 0.439 * R - 0.368 * G - 0.071 * B + 128;
  12.  
  13. //get YUV
  14. const float x = 1.164383;
  15. const float y = 1.138393;
  16. const float z = 1.138393;
  17. const vec3 src_bias = vec3(16.0 / 255.0, 128.0 / 255.0, 128.0 / 255.0);
  18. const mat3 src_xform = mat3(1.00000000 * x, 0.00000000 * y, 1.57480000 * z,
  19. 1.00000000 * x, -0.18732427 * y, -0.46812427 * z,
  20. 1.00000000 * x, 1.85560000 * y, 0.00000000 * z);
  21. void main()
  22. {
  23. float yy = texture2D(gm_BaseTexture, vec2(v_vTexcoord.x, v_vTexcoord.y)).r;
  24. vec2 cbcr = texture2D(v_chroma, vec2(v_vTexcoord.x, v_vTexcoord.y)).rg;
  25. vec3 yuv = vec3(yy, cbcr);
  26. yuv -= src_bias;
  27. yuv *= src_xform;
  28. gl_FragColor = vec4(yuv, 1.0);
  29. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement