Bloom.glsl 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "Uniforms.glsl"
  2. #include "Samplers.glsl"
  3. #include "Transform.glsl"
  4. #include "ScreenPos.glsl"
  5. varying vec2 vTexCoord;
  6. varying vec2 vScreenPos;
  7. #ifdef COMPILEPS
  8. uniform float cBloomThreshold;
  9. uniform vec2 cBloomMix;
  10. uniform vec2 cHBlurInvSize;
  11. #endif
  12. void VS()
  13. {
  14. mat4 modelMatrix = iModelMatrix;
  15. vec3 worldPos = GetWorldPos(modelMatrix);
  16. gl_Position = GetClipPos(worldPos);
  17. vTexCoord = GetQuadTexCoord(gl_Position);
  18. vScreenPos = GetScreenPosPreDiv(gl_Position);
  19. }
  20. void PS()
  21. {
  22. #ifdef BRIGHT
  23. vec3 rgb = texture2D(sDiffMap, vScreenPos).rgb;
  24. gl_FragColor = vec4((rgb - vec3(cBloomThreshold, cBloomThreshold, cBloomThreshold)) / (1.0 - cBloomThreshold), 1.0);
  25. #endif
  26. #ifdef HBLUR
  27. vec3 rgb = texture2D(sDiffMap, vTexCoord + vec2(-2.0, 0.0) * cHBlurInvSize).rgb * 0.1;
  28. rgb += texture2D(sDiffMap, vTexCoord + vec2(-1.0, 0.0) * cHBlurInvSize).rgb * 0.25;
  29. rgb += texture2D(sDiffMap, vTexCoord + vec2(0.0, 0.0) * cHBlurInvSize).rgb * 0.3;
  30. rgb += texture2D(sDiffMap, vTexCoord + vec2(1.0, 0.0) * cHBlurInvSize).rgb * 0.25;
  31. rgb += texture2D(sDiffMap, vTexCoord + vec2(2.0, 0.0) * cHBlurInvSize).rgb * 0.1;
  32. gl_FragColor = vec4(rgb, 1.0);
  33. #endif
  34. #ifdef VBLUR
  35. vec3 rgb = texture2D(sDiffMap, vTexCoord + vec2(0.0, -2.0) * cHBlurInvSize).rgb * 0.1;
  36. rgb += texture2D(sDiffMap, vTexCoord + vec2(0.0, -1.0) * cHBlurInvSize).rgb * 0.25;
  37. rgb += texture2D(sDiffMap, vTexCoord + vec2(0.0, 0.0) * cHBlurInvSize).rgb * 0.3;
  38. rgb += texture2D(sDiffMap, vTexCoord + vec2(0.0, 1.0) * cHBlurInvSize).rgb * 0.25;
  39. rgb += texture2D(sDiffMap, vTexCoord + vec2(0.0, 2.0) * cHBlurInvSize).rgb * 0.1;
  40. gl_FragColor = vec4(rgb, 1.0);
  41. #endif
  42. #ifdef COMBINE
  43. vec3 original = texture2D(sDiffMap, vScreenPos).rgb * cBloomMix.x;
  44. vec3 bloom = texture2D(sNormalMap, vTexCoord).rgb * cBloomMix.y;
  45. // Prevent oversaturation
  46. original *= max(vec3(1.0) - bloom, vec3(0.0));
  47. gl_FragColor = vec4(original + bloom, 1.0);
  48. #endif
  49. }