ExponentialShadowmappingResolve.ankiprog 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <!--
  2. Copyright (C) 2009-2018, Panagiotis Christopoulos Charitos and contributors.
  3. All rights reserved.
  4. Code licensed under the BSD License.
  5. http://www.anki3d.org/LICENSE
  6. -->
  7. <shaderProgram>
  8. <shaders>
  9. <shader type="vert">
  10. <source><![CDATA[
  11. #include "shaders/Common.glsl"
  12. out gl_PerVertex
  13. {
  14. vec4 gl_Position;
  15. };
  16. layout(ANKI_UBO_BINDING(0, 0)) uniform u_
  17. {
  18. vec4 u_nearFarPad2;
  19. vec4 u_uvScaleAndTranslation;
  20. };
  21. layout(location = 0) out vec2 out_uv;
  22. void main()
  23. {
  24. out_uv = vec2(gl_VertexID & 1, gl_VertexID >> 1) * 2.0;
  25. vec2 pos = out_uv * 2.0 - 1.0;
  26. out_uv = fma(out_uv, u_uvScaleAndTranslation.zw, u_uvScaleAndTranslation.xy);
  27. gl_Position = vec4(pos, 0.0, 1.0);
  28. }
  29. ]]></source>
  30. </shader>
  31. <shader type="frag">
  32. <inputs>
  33. <input name="INPUT_TEXTURE_SIZE" type="uvec2" const="1"/>
  34. </inputs>
  35. <source><![CDATA[
  36. #include "shaders/GaussianBlurCommon.glsl"
  37. #include "shaders/Functions.glsl"
  38. layout(location = 0) in vec2 in_uv;
  39. layout(ANKI_TEX_BINDING(0, 0)) uniform sampler2D u_inputTex;
  40. layout(ANKI_UBO_BINDING(0, 0)) uniform u_
  41. {
  42. vec4 u_nearFarPad2;
  43. vec4 u_uvScaleAndTranslation;
  44. };
  45. #define u_near u_nearFarPad2.x
  46. #define u_far u_nearFarPad2.y
  47. layout(location = 0) out float out_color;
  48. float sampleLinearDepth(vec2 uv)
  49. {
  50. return linearizeDepth(textureLod(u_inputTex, uv, 0.0).r, u_near, u_far);
  51. }
  52. void main()
  53. {
  54. const vec2 TEXEL_SIZE = 1.0 / vec2(INPUT_TEXTURE_SIZE);
  55. vec2 uvOffset = 1.1 * TEXEL_SIZE;
  56. out_color = sampleLinearDepth(in_uv) * BOX_WEIGHTS[0u];
  57. out_color += sampleLinearDepth(in_uv + vec2(uvOffset.x, 0.0)) * BOX_WEIGHTS[1u];
  58. out_color += sampleLinearDepth(in_uv + vec2(-uvOffset.x, 0.0)) * BOX_WEIGHTS[1u];
  59. out_color += sampleLinearDepth(in_uv + vec2(0.0, uvOffset.y)) * BOX_WEIGHTS[1u];
  60. out_color += sampleLinearDepth(in_uv + vec2(0.0, -uvOffset.y)) * BOX_WEIGHTS[1u];
  61. out_color += sampleLinearDepth(in_uv + vec2(uvOffset.x, uvOffset.y)) * BOX_WEIGHTS[2u];
  62. out_color += sampleLinearDepth(in_uv + vec2(-uvOffset.x, uvOffset.y)) * BOX_WEIGHTS[2u];
  63. out_color += sampleLinearDepth(in_uv + vec2(uvOffset.x, -uvOffset.y)) * BOX_WEIGHTS[2u];
  64. out_color += sampleLinearDepth(in_uv + vec2(-uvOffset.x, -uvOffset.y)) * BOX_WEIGHTS[2u];
  65. }
  66. ]]></source>
  67. </shader>
  68. </shaders>
  69. </shaderProgram>