Outline2D.hx 993 B

12345678910111213141516171819202122232425262728293031
  1. package h3d.shader;
  2. class Outline2D extends ScreenShader {
  3. static var SRC = {
  4. @param var texture : Sampler2D;
  5. @param var size : Vec2;
  6. @param @const var samples : Int;
  7. @param var color : Vec4;
  8. @param @const var multiplyAlpha : Int;
  9. function fragment() {
  10. var ownColor : Vec4 = texture.get(input.uv);
  11. var maxAlpha = 0.;
  12. var curColor : Vec4;
  13. var displaced : Vec2;
  14. var angle = 0.;
  15. var doublePi = 6.28318530717958647692528;
  16. var step = doublePi / samples;
  17. @unroll for (i in 0...samples) {
  18. angle += step;
  19. displaced.x = input.uv.x + size.x * cos(angle);
  20. displaced.y = input.uv.y + size.y * sin(angle);
  21. curColor = texture.get(displaced);
  22. maxAlpha = max(maxAlpha, curColor.a);
  23. }
  24. var resultAlpha = max(maxAlpha, ownColor.a);
  25. var resultColor = ownColor.rgb + color.rgb * (1. - ownColor.a);
  26. var out = resultColor * max(float(multiplyAlpha), resultAlpha);
  27. output.color = vec4(out, resultAlpha * mix(color.a, 1, ownColor.a));
  28. }
  29. };
  30. }