Text.glsl 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include "Uniforms.glsl"
  2. #include "Samplers.glsl"
  3. #include "Transform.glsl"
  4. varying vec2 vTexCoord;
  5. varying vec4 vColor;
  6. #ifdef TEXT_EFFECT_SHADOW
  7. uniform vec2 cShadowOffset;
  8. uniform vec4 cShadowColor;
  9. #endif
  10. #ifdef TEXT_EFFECT_STROKE
  11. uniform vec4 cStrokeColor;
  12. #endif
  13. void VS()
  14. {
  15. mat4 modelMatrix = iModelMatrix;
  16. vec3 worldPos = GetWorldPos(modelMatrix);
  17. gl_Position = GetClipPos(worldPos);
  18. vTexCoord = iTexCoord;
  19. vColor = iColor;
  20. }
  21. void PS()
  22. {
  23. gl_FragColor.rgb = vColor.rgb;
  24. #ifdef SIGNED_DISTANCE_FIELD
  25. float distance = texture2D(sDiffMap, vTexCoord).a;
  26. if (distance < 0.5)
  27. {
  28. #ifdef TEXT_EFFECT_SHADOW
  29. if (texture2D(sDiffMap, vTexCoord - cShadowOffset).a > 0.5)
  30. gl_FragColor = cShadowColor;
  31. else
  32. #endif
  33. gl_FragColor.a = 0.0;
  34. }
  35. else
  36. {
  37. #ifdef TEXT_EFFECT_STROKE
  38. if (distance < 0.525)
  39. gl_FragColor.rgb = cStrokeColor.rgb;
  40. #endif
  41. #ifdef TEXT_EFFECT_SHADOW
  42. if (texture2D(sDiffMap, vTexCoord + cShadowOffset).a < 0.5)
  43. gl_FragColor.a = vColor.a;
  44. else
  45. #endif
  46. gl_FragColor.a = vColor.a * smoothstep(0.5, 0.505, distance);
  47. }
  48. #else
  49. gl_FragColor.a = vColor.a * texture2D(sDiffMap, vTexCoord).a;
  50. #endif
  51. }