convolution.fragment.fx 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. // Samplers
  2. varying vec2 vUV;
  3. uniform sampler2D textureSampler;
  4. uniform vec2 screenSize;
  5. uniform float kernel[9];
  6. void main(void)
  7. {
  8. vec2 onePixel = vec2(1.0, 1.0) / screenSize;
  9. vec4 colorSum =
  10. texture2D(textureSampler, vUV + onePixel * vec2(-1, -1)) * kernel[0] +
  11. texture2D(textureSampler, vUV + onePixel * vec2(0, -1)) * kernel[1] +
  12. texture2D(textureSampler, vUV + onePixel * vec2(1, -1)) * kernel[2] +
  13. texture2D(textureSampler, vUV + onePixel * vec2(-1, 0)) * kernel[3] +
  14. texture2D(textureSampler, vUV + onePixel * vec2(0, 0)) * kernel[4] +
  15. texture2D(textureSampler, vUV + onePixel * vec2(1, 0)) * kernel[5] +
  16. texture2D(textureSampler, vUV + onePixel * vec2(-1, 1)) * kernel[6] +
  17. texture2D(textureSampler, vUV + onePixel * vec2(0, 1)) * kernel[7] +
  18. texture2D(textureSampler, vUV + onePixel * vec2(1, 1)) * kernel[8];
  19. float kernelWeight =
  20. kernel[0] +
  21. kernel[1] +
  22. kernel[2] +
  23. kernel[3] +
  24. kernel[4] +
  25. kernel[5] +
  26. kernel[6] +
  27. kernel[7] +
  28. kernel[8];
  29. if (kernelWeight <= 0.0) {
  30. kernelWeight = 1.0;
  31. }
  32. gl_FragColor = vec4((colorSum / kernelWeight).rgb, 1);
  33. }