ShadowBlur.hlsl 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "Uniforms.hlsl"
  2. #include "Samplers.hlsl"
  3. #include "Transform.hlsl"
  4. #include "ScreenPos.hlsl"
  5. #ifndef D3D11
  6. // D3D9 uniforms
  7. uniform float2 cBlurOffsets;
  8. #else
  9. #ifdef COMPILEPS
  10. // D3D11 constant buffers
  11. cbuffer CustomPS : register(b6)
  12. {
  13. float2 cBlurOffsets;
  14. }
  15. #endif
  16. #endif
  17. void VS(float4 iPos : POSITION,
  18. out float2 oScreenPos : TEXCOORD0,
  19. out float4 oPos : OUTPOSITION)
  20. {
  21. float4x3 modelMatrix = iModelMatrix;
  22. float3 worldPos = GetWorldPos(modelMatrix);
  23. oPos = GetClipPos(worldPos);
  24. oScreenPos = GetScreenPosPreDiv(oPos);
  25. }
  26. void PS(float2 iScreenPos : TEXCOORD0,
  27. out float4 oColor : OUTCOLOR0)
  28. {
  29. float2 color = 0.0;
  30. color += 0.015625 * Sample2D(DiffMap, iScreenPos - 3.0 * cBlurOffsets).rg;
  31. color += 0.09375 * Sample2D(DiffMap, iScreenPos - 2.0 * cBlurOffsets).rg;
  32. color += 0.234375 * Sample2D(DiffMap, iScreenPos - cBlurOffsets).rg;
  33. color += 0.3125 * Sample2D(DiffMap, iScreenPos).rg;
  34. color += 0.234375 * Sample2D(DiffMap, iScreenPos + cBlurOffsets).rg;
  35. color += 0.09375 * Sample2D(DiffMap, iScreenPos + 2.0 * cBlurOffsets).rg;
  36. color += 0.015625 * Sample2D(DiffMap, iScreenPos + 3.0 * cBlurOffsets).rg;
  37. oColor = float4(color, 0.0, 0.0);
  38. }