4 void ComputeTextColor(out float4 OutFragmentColor,float4 FragmentColor,float4 TextColor=float4(1.0f,1.0f,1.0f,1.0f)){
5 OutFragmentColor.a=FragmentColor.r*TextColor.a;
6 OutFragmentColor.rgb=TextColor.rgb;
12 void NormalizeSpriteSpacePosition(out float2 OutSpriteSpacePosition,float2 Position,float2 Divisor){
13 OutSpriteSpacePosition.x=Position.x/Divisor.x;
14 OutSpriteSpacePosition.y=Position.y/Divisor.y;
19 void ComputeInverseTranslation(out float2 OutInverseTranslation,float2 Translation){
20 OutInverseTranslation=-Translation;
25 void Apply2DTranslation(out float2 OutTranslatedPosition,float2 Position,float2 Translation){
26 OutTranslatedPosition=Position+Translation;
31 void Apply2DTransformation(out float2 OutTransformedPosition,float2 Position,float3x2 Transformation){
32 OutTransformedPosition=mul(float3(Position,1.0f),Transformation).xy;
37 void Apply3DTransformation(out float4 OutTransformedPosition,float2 Position,float4x4 Transformation){
38 OutTransformedPosition=mul(float4(Position,0.0f,1.0f),Transformation);
44 void Apply2DScalingAndTranslation(out float2 OutTransformedPosition,float2 Position,float4 ScalingAndTranslation){
45 OutTransformedPosition=Position.xy*ScalingAndTranslation.xy+ScalingAndTranslation.zw;
51 void ComputeSpriteToViewportSpace(out float3x2 OutSpriteToViewportSpace,float2 ViewportSpaceSpritePosition,
float SpriteRotation,float2 SpriteSpaceCenter,float2 SpriteSize){
53 float RotationSin,RotationCos;
54 sincos(SpriteRotation,RotationSin,RotationCos);
55 OutSpriteToViewportSpace._11=RotationCos*SpriteSize.x;
56 OutSpriteToViewportSpace._12=-RotationSin*SpriteSize.x;
57 OutSpriteToViewportSpace._21=RotationSin*SpriteSize.y;
58 OutSpriteToViewportSpace._22=RotationCos*SpriteSize.y;
60 float2 ViewportCenterOffest=mul(SpriteSpaceCenter,float2x2(OutSpriteToViewportSpace._11,OutSpriteToViewportSpace._12,OutSpriteToViewportSpace._21,OutSpriteToViewportSpace._22));
61 ViewportSpaceSpritePosition-=ViewportCenterOffest;
62 OutSpriteToViewportSpace._31=ViewportSpaceSpritePosition.x;
63 OutSpriteToViewportSpace._32=ViewportSpaceSpritePosition.y;
69 void ComputeViewportToProjectionSpace(out float3x4 OutViewportToProjectionSpace,float2 ViewportSize){
70 float2 InvViewportSize=float2(1.0f/ViewportSize.x,1.0f/ViewportSize.y);
71 OutViewportToProjectionSpace._11=2.0f*InvViewportSize.x;
72 OutViewportToProjectionSpace._12=0.0f;
73 OutViewportToProjectionSpace._13=0.0f;
74 OutViewportToProjectionSpace._14=0.0f;
76 OutViewportToProjectionSpace._21=0.0f;
77 OutViewportToProjectionSpace._22=-2.0f*InvViewportSize.y;
78 OutViewportToProjectionSpace._23=0.0f;
79 OutViewportToProjectionSpace._24=0.0f;
81 OutViewportToProjectionSpace._31=-1.0f;
82 OutViewportToProjectionSpace._32=1.0f;
83 OutViewportToProjectionSpace._33=0.0f;
84 OutViewportToProjectionSpace._34=1.0f;
91 void Apply2DProjectionSpaceTransform(out float4 OutProjectionSpacePosition,float2 ViewportSpacePosition,float3x4 ViewportToProjectionSpace){
92 OutProjectionSpacePosition=mul(float3(ViewportSpacePosition,1.0f),ViewportToProjectionSpace);
103 void ComputePlanarProjectionSpacePosition(out float4 OutProjectionSpacePosition,float2 Position){
104 OutProjectionSpacePosition=float4(2.0f*Position.x-1.0f,-2.0f*Position.y+1.0f,0.5f,1.0f);
114 void ComputeGraphPosition(out float2 OutPosition,
float XCoordinate,
float YCoordinate,float2 DomainTransform,
float YOffset){
115 OutPosition=float2(XCoordinate*DomainTransform.x,YCoordinate*DomainTransform.y+YOffset);
144 void GenerateGraphQuad(inout TriangleStream<SGraphOutputVertex> OutTriangleStream,
SGraphInputVertex pLineVertex[2],float2 DomainTransform,float2 Divisor,float3x2 SpriteToViewportSpace,float3x4 ViewportToProjectionSpace){
147 float2 pLineSpriteSpacePosition[2]={
148 float2(pLineVertex[0].XCoordinate,pLineVertex[0].YCoordinate)*DomainTransform,
149 float2(pLineVertex[1].XCoordinate,pLineVertex[1].YCoordinate)*DomainTransform
152 float2 LineVector=pLineSpriteSpacePosition[1]-pLineSpriteSpacePosition[0];
153 float2 OrthonormalVector=normalize(float2(LineVector.y,-LineVector.x));
154 float2 pSpriteSpacePosition[4]={
155 pLineSpriteSpacePosition[0]-OrthonormalVector*HalfLineWidth,
156 pLineSpriteSpacePosition[0]+OrthonormalVector*HalfLineWidth,
157 pLineSpriteSpacePosition[1]-OrthonormalVector*HalfLineWidth,
158 pLineSpriteSpacePosition[1]+OrthonormalVector*HalfLineWidth
161 [unroll]
for(
int i=0;i!=4;++i){
162 float2 SpriteSpacePosition=pSpriteSpacePosition[i];
164 float2 NormalizedSpriteSpacePosition=float2(SpriteSpacePosition.x/Divisor.x,SpriteSpacePosition.y/Divisor.y);
166 float2 ViewportSpacePosition=mul(float3(NormalizedSpriteSpacePosition,1.0f),SpriteToViewportSpace);
168 float4 ProjectionSpacePosition=mul(float3(ViewportSpacePosition,1.0f),ViewportToProjectionSpace);
172 OutTriangleStream.Append(NewVertex);
float4 ProjectionSpacePosition