debayer.frag 835 B

123456789101112131415161718192021222324252627282930313233343536
  1. precision mediump float;
  2. uniform sampler2D texture;
  3. // uniform sampler2D srgb_map;
  4. uniform mat3 color_matrix;
  5. varying vec2 uv1;
  6. varying vec2 uv2;
  7. varying vec2 pixel_coord;
  8. #define fetch(p) texture2D(texture, p).r
  9. void main() {
  10. vec4 pixels = vec4(
  11. fetch(uv1),
  12. fetch(vec2(uv1.x, uv2.y)),
  13. fetch(uv2),
  14. fetch(vec2(uv2.x, uv1.y)));
  15. vec2 arrangement = mod(pixel_coord, 2.0);
  16. vec2 is_top_left = step(1.0, arrangement);
  17. vec3 color = mix(
  18. mix(pixels.zyx, pixels.wzy, is_top_left.y),
  19. mix(pixels.yzw, pixels.xyz, is_top_left.y),
  20. is_top_left.x);
  21. vec3 srgb_color = pow(color, vec3(1.0 / 2.2));
  22. // vec3 srgb_color = vec3(
  23. // texture2D(srgb_map, vec2(color.r, 0)).r,
  24. // texture2D(srgb_map, vec2(color.g, 0)).r,
  25. // texture2D(srgb_map, vec2(color.b, 0)).r);
  26. gl_FragColor = vec4((color_matrix * srgb_color).bgr, 0);
  27. }