Text.hlsl 1.6 KB

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