gauss_vert.fs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #version 150
  2. #define BOOST 1.0
  3. #define CRT_GEOM_BEAM 1
  4. uniform sampler2D source[];
  5. uniform vec4 sourceSize[];
  6. in Vertex {
  7. vec2 vTexCoord;
  8. vec2 data_pix_no;
  9. float data_one;
  10. };
  11. out vec4 FragColor;
  12. vec3 beam(vec3 color, float dist)
  13. {
  14. #if CRT_GEOM_BEAM
  15. vec3 wid = 2.0 + 2.0 * pow(color, vec3(4.0));
  16. vec3 weights = vec3(abs(dist) * 3.333333333);
  17. return 2.0 * color * exp(-pow(weights * inversesqrt(0.5 * wid), wid)) / (0.6 + 0.2 * wid);
  18. #else
  19. float reciprocal_width = 4.0;
  20. vec3 x = dist * reciprocal_width;
  21. return 2.0 * color * exp(-0.5 * x * x) * reciprocal_width;
  22. #endif
  23. }
  24. void main() {
  25. vec2 texel = floor(data_pix_no);
  26. float phase = data_pix_no.y - texel.y;
  27. vec2 tex = vec2(texel + 0.5) * sourceSize[0].zw;
  28. vec3 top = texture(source[0], tex + vec2(0.0, 0 * data_one)).rgb;
  29. vec3 bottom = texture(source[0], tex + vec2(0.0, 1 * data_one)).rgb;
  30. float dist0 = phase;
  31. float dist1 = 1.0 - phase;
  32. vec3 scanline = vec3(0.0);
  33. scanline += beam(top, dist0);
  34. scanline += beam(bottom, dist1);
  35. FragColor = vec4(BOOST * scanline * 0.869565217391304, 1.0);
  36. }