101 lines
1.9 KiB
HLSL
101 lines
1.9 KiB
HLSL
float2 vInvScreenSize;
|
|
float2 vGlyphScale;
|
|
float2 vTexScale;
|
|
|
|
Texture2D txDiffuse;
|
|
SamplerState samPoint {
|
|
Filter = MIN_MAG_MIP_POINT;
|
|
AddressU = Wrap;
|
|
AddressV = Wrap;
|
|
};
|
|
|
|
struct VS_INPUT
|
|
{
|
|
float4 Pos : TEXCOORD;
|
|
};
|
|
|
|
struct GS_INPUT
|
|
{
|
|
float4 Pos : SV_POSITION;
|
|
};
|
|
|
|
struct PS_INPUT
|
|
{
|
|
float4 Pos : SV_POSITION;
|
|
float2 Tex : TEXCOORD0;
|
|
};
|
|
|
|
|
|
GS_INPUT VS(VS_INPUT input)
|
|
{
|
|
GS_INPUT output;
|
|
|
|
output.Pos = input.Pos;
|
|
|
|
return output;
|
|
}
|
|
|
|
static const float2 vertices[] = {
|
|
float2( 0.0f, 0.0f), // -- top right
|
|
float2( 1.0f, 0.0f), // -- top left
|
|
float2( 0.0f, -1.0f), // -- bottom right
|
|
float2( 1.0f, -1.0f), // -- bottom left
|
|
};
|
|
|
|
[maxvertexcount(4)]
|
|
void GS (point GS_INPUT input[1], inout TriangleStream<PS_INPUT> TriStream)
|
|
{
|
|
PS_INPUT output;
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
float2 Pos;
|
|
Pos = vertices[i] * vGlyphScale + input[0].Pos.xy;
|
|
Pos = Pos * vInvScreenSize + float2(-1, 1);
|
|
output.Pos = float4(Pos.xy, 0, 1);
|
|
|
|
output.Tex = vertices[i] * float2(1, -1);
|
|
output.Tex = (output.Tex + input[0].Pos.zw) * vTexScale;
|
|
|
|
TriStream.Append(output);
|
|
}
|
|
TriStream.RestartStrip();
|
|
}
|
|
|
|
float4 PS(PS_INPUT input) : SV_Target
|
|
{
|
|
float4 texColor = txDiffuse.Sample(samPoint, input.Tex);
|
|
|
|
float c = texColor.x == 0 ? 0.0 : 1.0;
|
|
|
|
return float4(c.xxx, 1);
|
|
}
|
|
|
|
BlendState EnableBlending
|
|
{
|
|
BlendEnable[0] = TRUE;
|
|
SrcBlend = ONE;
|
|
DestBlend = ONE;
|
|
BlendOp = ADD;
|
|
SrcBlendAlpha = ZERO;
|
|
DestBlendAlpha = ZERO;
|
|
BlendOpAlpha = ADD;
|
|
};
|
|
|
|
DepthStencilState DisableDepth
|
|
{
|
|
DepthEnable = FALSE;
|
|
DepthWriteMask = ZERO;
|
|
};
|
|
|
|
technique10 Font
|
|
{
|
|
pass P0
|
|
{
|
|
SetVertexShader(CompileShader(vs_4_0, VS()));
|
|
SetGeometryShader(CompileShader(gs_4_0, GS()));
|
|
SetPixelShader(CompileShader(ps_4_0, PS()));
|
|
SetBlendState(EnableBlending, float4(0.0, 0.0, 0.0, 0.0), 0xffffffff);
|
|
SetDepthStencilState(DisableDepth, 0);
|
|
}
|
|
}
|