GaussianBlurCommon.glsl 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. // Copyright (C) 2009-2020, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <shaders/Common.glsl>
  7. #if KERNEL_SIZE == 3
  8. const U32 STEP_COUNT = 1u;
  9. const F32 WEIGHTS[STEP_COUNT + 1u] = {0.361069, 0.319466};
  10. #elif KERNEL_SIZE == 5
  11. const U32 STEP_COUNT = 2u;
  12. const F32 WEIGHTS[STEP_COUNT + 1u] = {0.250301, 0.221461, 0.153388};
  13. #elif KERNEL_SIZE == 7
  14. const U32 STEP_COUNT = 3u;
  15. const F32 WEIGHTS[STEP_COUNT + 1u] = {0.214607, 0.189879, 0.131514, 0.071303};
  16. #elif KERNEL_SIZE == 9
  17. const U32 STEP_COUNT = 4u;
  18. const F32 WEIGHTS[STEP_COUNT + 1u] = {0.20236, 0.179044, 0.124009, 0.067234, 0.028532};
  19. #elif KERNEL_SIZE == 11
  20. const U32 STEP_COUNT = 5u;
  21. const F32 WEIGHTS[STEP_COUNT + 1u] = {0.198596, 0.175713, 0.121703, 0.065984, 0.028002, 0.0093};
  22. #endif
  23. // Imagine you are sampling a 3x3 area:
  24. // +-+-+-+
  25. // |c|b|c|
  26. // +-+-+-+
  27. // |b|a|b|
  28. // +-+-+-+
  29. // |c|b|c|
  30. // +-+-+-+
  31. // It's BOX_WEIGHTS[0] for the a texels. BOX_WEIGHTS[1] for the b texels. BOX_WEIGHTS[2] for the c texels.
  32. // Note: BOX_WEIGHTS[0] + BOX_WEIGHTS[1] * 4 + BOX_WEIGHTS[2] * 4 == 1.0
  33. const Vec3 BOX_WEIGHTS = Vec3(0.25, 0.125, 0.0625);