Text.hlsl 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "Uniforms.hlsl"
  2. #include "Samplers.hlsl"
  3. #include "Transform.hlsl"
  4. #ifdef TEXT_EFFECT_SHADOW
  5. uniform float2 cShadowOffset;
  6. uniform float4 cShadowColor;
  7. #endif
  8. #ifdef TEXT_EFFECT_STROKE
  9. uniform float4 cStrokeColor;
  10. #endif
  11. void VS(float4 iPos : POSITION,
  12. float4 iColor : COLOR0,
  13. float2 iTexCoord : TEXCOORD0,
  14. out float4 oPos : POSITION,
  15. out float4 oColor : COLOR0,
  16. out float2 oTexCoord : TEXCOORD0)
  17. {
  18. float4x3 modelMatrix = iModelMatrix;
  19. float3 worldPos = GetWorldPos(modelMatrix);
  20. oPos = GetClipPos(worldPos);
  21. oColor = iColor;
  22. oTexCoord = iTexCoord;
  23. }
  24. void PS(float4 iColor : COLOR0,
  25. float2 iTexCoord : TEXCOORD0,
  26. out float4 oColor : COLOR0)
  27. {
  28. oColor.rgb = iColor.rgb;
  29. #ifdef SIGNED_DISTANCE_FIELD
  30. float distance = tex2D(sDiffMap, iTexCoord).a;
  31. if (distance < 0.5f)
  32. {
  33. #ifdef TEXT_EFFECT_SHADOW
  34. if (tex2D(sDiffMap, iTexCoord - cShadowOffset).a > 0.5f)
  35. oColor = cShadowColor;
  36. else
  37. #endif
  38. oColor.a = 0.0f;
  39. }
  40. else
  41. {
  42. #ifdef TEXT_EFFECT_STROKE
  43. if (distance < 0.525f)
  44. oColor.rgb = cStrokeColor.rgb;
  45. #endif
  46. #ifdef TEXT_EFFECT_SHADOW
  47. if (tex2D(sDiffMap, iTexCoord + cShadowOffset).a < 0.5f)
  48. oColor.a = iColor.a;
  49. else
  50. #endif
  51. oColor.a = iColor.a * smoothstep(0.5f, 0.505f, distance);
  52. }
  53. #else
  54. oColor.a = iColor.a * tex2D(sDiffMap, iTexCoord).a;
  55. #endif
  56. }