TextShadowPS.hlsl 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // RUN: %dxc -E main -T ps_6_0 %s | FileCheck %s
  2. // CHECK: sample
  3. // CHECK: Saturate
  4. //
  5. // Copyright (c) Microsoft. All rights reserved.
  6. // This code is licensed under the MIT License (MIT).
  7. // THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
  8. // ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
  9. // IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
  10. // PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
  11. //
  12. // Developed by Minigraph
  13. //
  14. // Author: James Stanard
  15. //
  16. #include "TextRS.hlsli"
  17. cbuffer cbFontParams : register( b0 )
  18. {
  19. float4 Color;
  20. float2 ShadowOffset;
  21. float ShadowHardness;
  22. float ShadowOpacity;
  23. float HeightRange; // The range of the signed distance field.
  24. }
  25. Texture2D<float> SignedDistanceFieldTex : register( t0 );
  26. SamplerState LinearSampler : register( s0 );
  27. struct PS_INPUT
  28. {
  29. float4 pos : SV_POSITION;
  30. float2 uv : TEXCOORD0;
  31. };
  32. float GetAlpha( float2 uv, float range )
  33. {
  34. return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * range + 0.5);
  35. }
  36. [RootSignature(Text_RootSig)]
  37. float4 main( PS_INPUT Input ) : SV_Target
  38. {
  39. float alpha1 = GetAlpha(Input.uv, HeightRange) * Color.a;
  40. float alpha2 = GetAlpha(Input.uv - ShadowOffset, HeightRange * ShadowHardness) * ShadowOpacity * Color.a;
  41. return float4( Color.rgb * alpha1, lerp(alpha2, 1, alpha1) );
  42. }