tv.frag 988 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // TV-like effect where bright pixels are larger than dark pixels.
  2. uniform sampler2D tex;
  3. uniform sampler2D videoTex;
  4. uniform float minScanline;
  5. uniform float sizeVariance;
  6. in vec4 intCoord;
  7. in vec4 cornerCoord0;
  8. in vec4 cornerCoord1;
  9. out vec4 fragColor;
  10. vec4 calcCorner(const vec2 texCoord0,
  11. const vec2 texCoord1,
  12. const float dist)
  13. {
  14. vec4 col0 = texture(tex, texCoord0);
  15. #if SUPERIMPOSE
  16. vec4 vid = texture(videoTex, texCoord1);
  17. vec4 col = mix(vid, col0, col0.a);
  18. #else
  19. vec4 col = col0;
  20. #endif
  21. return col * smoothstep(
  22. minScanline + sizeVariance * (vec4(1.0) - col),
  23. vec4(1.0),
  24. vec4(dist));
  25. }
  26. void main()
  27. {
  28. vec4 distComp = fract(intCoord);
  29. fragColor = mix(
  30. calcCorner(cornerCoord0.xy, cornerCoord1.xy, distComp.w) +
  31. calcCorner(cornerCoord0.xw, cornerCoord1.xw, distComp.y),
  32. calcCorner(cornerCoord0.zy, cornerCoord1.zy, distComp.w) +
  33. calcCorner(cornerCoord0.zw, cornerCoord1.zw, distComp.y),
  34. smoothstep(0.0, 1.0, distComp.x));
  35. }