forked from DestroyerDarkNess/RenderSpy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSpriteShader.fx
109 lines (91 loc) · 2.04 KB
/
SpriteShader.fx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
Texture2D Tex;
SamplerState sam
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Wrap;
AddressV = Wrap;
};
struct VS_IN
{
float2 TexCoord : TEXCOORD;
float4 Color : COLOR;
float2 TexCoordSize : TEXCOORDSIZE;
float2 TopLeft : TOPLEFT;
float2 TopRight : TOPRIGHT;
float2 BottomLeft : BOTTOMLEFT;
float2 BottomRight : BOTTOMRIGHT;
};
struct GS_OUT
{
float2 TexCoord : TEXCOORD;
float4 Color : COLOR;
float4 Position : SV_POSITION;
};
struct PS_IN
{
float2 TexCoord : TEXCOORD;
float4 Color : COLOR;
};
DepthStencilState DisableDepth
{
DepthEnable = FALSE;
DepthWriteMask = ZERO;
};
[maxvertexcount(4)]
void mainGS( point VS_IN input[1], inout TriangleStream<GS_OUT> TriStream )
{
/*
0 -- 1
| / |
| / |
2 -- 3
*/
GS_OUT v;
v.Color = input[0].Color;
v.Position = float4(input[0].TopLeft, 0, 1);
v.TexCoord = input[0].TexCoord;
TriStream.Append(v);
v.Position = float4(input[0].TopRight, 0, 1);
v.TexCoord.x += input[0].TexCoordSize.x;
TriStream.Append(v);
v.Position = float4(input[0].BottomLeft, 0, 1);
v.TexCoord.x = input[0].TexCoord.x;
v.TexCoord.y += input[0].TexCoordSize.y;
TriStream.Append(v);
v.Position = float4(input[0].BottomRight, 0, 1);
v.TexCoord.x += input[0].TexCoordSize.x;
TriStream.Append(v);
TriStream.RestartStrip();
}
VS_IN mainVS(VS_IN vs_in){
return vs_in;
}
float4 mainPS(PS_IN ps_in) : SV_TARGET
{
return Tex.Sample(sam, ps_in.TexCoord) * ps_in.Color;
}
float4 mainPremultipliedPS(PS_IN ps_in) : SV_TARGET
{
float4 texel = Tex.Sample(sam, ps_in.TexCoord);
texel.rgb /= texel.a;
return texel * ps_in.Color;
}
technique10 Render
{
pass p0
{
SetVertexShader ( CompileShader( vs_4_0 , mainVS() ) );
SetGeometryShader ( CompileShader( gs_4_0 , mainGS() ) );
SetPixelShader ( CompileShader( ps_4_0 , mainPS() ) );
//SetDepthStencilState( DisableDepth, 0 );
}
}
technique10 RenderPremultiplied
{
pass p0
{
SetVertexShader(CompileShader(vs_4_0, mainVS()));
SetGeometryShader(CompileShader(gs_4_0, mainGS()));
SetPixelShader(CompileShader(ps_4_0, mainPremultipliedPS()));
}
}