convolution.fragment.fx 1.1 KB

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