lines2d.vertex.fx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // based on if Instanced Array are supported or not, declare the field either as attribute or uniform
  2. #ifdef Instanced
  3. #define att attribute
  4. #else
  5. #define att uniform
  6. #endif
  7. attribute vec2 position;
  8. att vec2 zBias;
  9. att vec4 transformX;
  10. att vec4 transformY;
  11. att vec3 renderingInfo;
  12. att float opacity;
  13. #ifdef FillSolid
  14. att vec4 fillSolidColor;
  15. #endif
  16. #ifdef BorderSolid
  17. att vec4 borderSolidColor;
  18. #endif
  19. #ifdef FillGradient
  20. att vec2 boundingMin;
  21. att vec2 boundingMax;
  22. att vec4 fillGradientColor1;
  23. att vec4 fillGradientColor2;
  24. att vec4 fillGradientTY;
  25. #endif
  26. #ifdef BorderGradient
  27. att vec4 borderGradientColor1;
  28. att vec4 borderGradientColor2;
  29. att vec4 borderGradientTY;
  30. #endif
  31. #define TWOPI 6.28318530
  32. // Output
  33. varying vec2 vUV;
  34. varying vec4 vColor;
  35. void main(void) {
  36. #ifdef FillSolid
  37. vColor = fillSolidColor;
  38. #endif
  39. #ifdef BorderSolid
  40. vColor = borderSolidColor;
  41. #endif
  42. #ifdef FillGradient
  43. float v = dot(vec4((position.xy - boundingMin) / (boundingMax - boundingMin), 1, 1), fillGradientTY);
  44. vColor = mix(fillGradientColor2, fillGradientColor1, v); // As Y is inverted, Color2 first, then Color1
  45. #endif
  46. #ifdef BorderGradient
  47. float v = dot(vec4((position.xy - boundingMin) / (boundingMax - boundingMin), 1, 1), borderGradientTY);
  48. vColor = mix(borderGradientColor2, borderGradientColor1, v); // As Y is inverted, Color2 first, then Color1
  49. #endif
  50. vColor.a *= opacity;
  51. vec4 pos;
  52. pos.xy = position.xy;
  53. pos.z = 1.0;
  54. pos.w = 1.0;
  55. float x = dot(pos, transformX);
  56. float y = dot(pos, transformY);
  57. if (renderingInfo.z == 1.0) {
  58. float rw = renderingInfo.x;
  59. float rh = renderingInfo.y;
  60. float irw = 2.0 / rw;
  61. float irh = 2.0 / rh;
  62. x = (floor((x / irw) + 0.5) * irw) + irw / 2.0;
  63. y = (floor((y / irh) + 0.5) * irh) + irh / 2.0;
  64. }
  65. gl_Position = vec4(x, y, zBias.x, 1);
  66. }