Bloom.frag 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include "Uniforms.frag"
  2. #include "Samplers.frag"
  3. uniform float cBloomThreshold;
  4. uniform vec2 cBloomMix;
  5. uniform vec2 cHBlurInvSize;
  6. varying vec2 vTexCoord;
  7. varying vec2 vScreenPos;
  8. void main()
  9. {
  10. #ifdef BRIGHT
  11. vec3 rgb = texture2D(sDiffMap, vScreenPos).rgb;
  12. gl_FragColor = vec4((rgb - vec3(cBloomThreshold, cBloomThreshold, cBloomThreshold)) / (1.0 - cBloomThreshold), 1.0);
  13. #endif
  14. #ifdef HBLUR
  15. vec3 rgb = texture2D(sDiffMap, vTexCoord + vec2(-2.0, 0.0) * cHBlurInvSize).rgb * 0.1;
  16. rgb += texture2D(sDiffMap, vTexCoord + vec2(-1.0, 0.0) * cHBlurInvSize).rgb * 0.25;
  17. rgb += texture2D(sDiffMap, vTexCoord + vec2(0.0, 0.0) * cHBlurInvSize).rgb * 0.3;
  18. rgb += texture2D(sDiffMap, vTexCoord + vec2(1.0, 0.0) * cHBlurInvSize).rgb * 0.25;
  19. rgb += texture2D(sDiffMap, vTexCoord + vec2(2.0, 0.0) * cHBlurInvSize).rgb * 0.1;
  20. gl_FragColor = vec4(rgb, 1.0);
  21. #endif
  22. #ifdef VBLUR
  23. vec3 rgb = texture2D(sDiffMap, vTexCoord + vec2(0.0, -2.0) * cHBlurInvSize).rgb * 0.1;
  24. rgb += texture2D(sDiffMap, vTexCoord + vec2(0.0, -1.0) * cHBlurInvSize).rgb * 0.25;
  25. rgb += texture2D(sDiffMap, vTexCoord + vec2(0.0, 0.0) * cHBlurInvSize).rgb * 0.3;
  26. rgb += texture2D(sDiffMap, vTexCoord + vec2(0.0, 1.0) * cHBlurInvSize).rgb * 0.25;
  27. rgb += texture2D(sDiffMap, vTexCoord + vec2(0.0, 2.0) * cHBlurInvSize).rgb * 0.1;
  28. gl_FragColor = vec4(rgb, 1.0);
  29. #endif
  30. #ifdef COMBINE
  31. vec3 original = texture2D(sDiffMap, vScreenPos).rgb * cBloomMix.x;
  32. vec3 bloom = texture2D(sNormalMap, vTexCoord).rgb * cBloomMix.y;
  33. // Prevent oversaturation
  34. original *= max(vec3(1.0) - bloom, vec3(0.0));
  35. gl_FragColor = vec4(original + bloom, 1.0);
  36. #endif
  37. }