BloomHDR.glsl 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "Uniforms.glsl"
  2. #include "Samplers.glsl"
  3. #include "Transform.glsl"
  4. #include "ScreenPos.glsl"
  5. #include "PostProcess.glsl"
  6. varying vec2 vTexCoord;
  7. varying vec2 vScreenPos;
  8. #ifdef COMPILEPS
  9. uniform float cBloomHDRThreshold;
  10. uniform float cBloomHDRBlurSigma;
  11. uniform float cBloomHDRBlurRadius;
  12. uniform vec2 cBloomHDRBlurDir;
  13. uniform vec2 cBloomHDRMix;
  14. uniform vec2 cBright2InvSize;
  15. uniform vec2 cBright4InvSize;
  16. uniform vec2 cBright8InvSize;
  17. uniform vec2 cBright16InvSize;
  18. const int BlurKernelSize = 5;
  19. #endif
  20. void VS()
  21. {
  22. mat4 modelMatrix = iModelMatrix;
  23. vec3 worldPos = GetWorldPos(modelMatrix);
  24. gl_Position = GetClipPos(worldPos);
  25. vTexCoord = GetQuadTexCoord(gl_Position);
  26. vScreenPos = GetScreenPosPreDiv(gl_Position);
  27. }
  28. void PS()
  29. {
  30. #ifdef BRIGHT
  31. vec3 color = texture2D(sDiffMap, vScreenPos).rgb;
  32. gl_FragColor = vec4(max(color - cBloomHDRThreshold, 0.0), 1.0);
  33. #endif
  34. #ifdef BLUR16
  35. gl_FragColor = GaussianBlur(BlurKernelSize, cBloomHDRBlurDir, cBright16InvSize * cBloomHDRBlurRadius, cBloomHDRBlurSigma, sDiffMap, vScreenPos);
  36. #endif
  37. #ifdef BLUR8
  38. gl_FragColor = GaussianBlur(BlurKernelSize, cBloomHDRBlurDir, cBright8InvSize * cBloomHDRBlurRadius, cBloomHDRBlurSigma, sDiffMap, vScreenPos);
  39. #endif
  40. #ifdef BLUR4
  41. gl_FragColor = GaussianBlur(BlurKernelSize, cBloomHDRBlurDir, cBright4InvSize * cBloomHDRBlurRadius, cBloomHDRBlurSigma, sDiffMap, vScreenPos);
  42. #endif
  43. #ifdef BLUR2
  44. gl_FragColor = GaussianBlur(BlurKernelSize, cBloomHDRBlurDir, cBright2InvSize * cBloomHDRBlurRadius, cBloomHDRBlurSigma, sDiffMap, vScreenPos);
  45. #endif
  46. #ifdef COMBINE16
  47. gl_FragColor = texture2D(sDiffMap, vScreenPos) + texture2D(sNormalMap, vTexCoord);
  48. #endif
  49. #ifdef COMBINE8
  50. gl_FragColor = texture2D(sDiffMap, vScreenPos) + texture2D(sNormalMap, vTexCoord);
  51. #endif
  52. #ifdef COMBINE4
  53. gl_FragColor = texture2D(sDiffMap, vScreenPos) + texture2D(sNormalMap, vTexCoord);
  54. #endif
  55. #ifdef COMBINE2
  56. vec3 color = texture2D(sDiffMap, vScreenPos).rgb * cBloomHDRMix.x;
  57. vec3 bloom = texture2D(sNormalMap, vTexCoord).rgb * cBloomHDRMix.y;
  58. gl_FragColor = vec4(color + bloom, 1.0);
  59. #endif
  60. }