49 lines
1.4 KiB
Plaintext
49 lines
1.4 KiB
Plaintext
#include "aorii_util.slang"
|
|
|
|
struct FontParams {
|
|
float smoothing; // 平滑度
|
|
float thickness; // 字体粗细
|
|
float outline_width; // 描边宽度
|
|
float4 outline_color; // 描边颜色
|
|
}
|
|
ParameterBlock<FontParams> font_param : register(b1);
|
|
|
|
struct PSInput {
|
|
float4 position : SV_Position;
|
|
float2 uv : TEXCOORD0;
|
|
float4 color : COLOR0;
|
|
float2 altas_uv : TEXCOORD1;
|
|
float altas_index : TEXCOORD2;
|
|
float2 char_size : TEXCOORD3;
|
|
};
|
|
|
|
struct Constants {
|
|
matrix transform;
|
|
};
|
|
ParameterBlock<Constants> param_buffer : register(b0);
|
|
|
|
PSInput vertex_main(VSInput input) {
|
|
PSInput output;
|
|
output.position = mul(float4(input.position, 0.0f, 1.0f), param_buffer.transform);
|
|
output.uv = input.uv;
|
|
output.color = input.color;
|
|
output.altas_uv = float2(input.param_a.x, input.param_a.y);
|
|
output.altas_index = input.param_a.z;
|
|
output.char_size = float2(input.param_b.x, input.param_b.y);
|
|
return output;
|
|
}
|
|
|
|
Texture2DArray atlas_texture : register(t0);
|
|
SamplerState sampler_state : register(s0);
|
|
|
|
float4 pixel_main(PSInput input) : SV_Target {
|
|
float2 uv = input.altas_uv + input.char_size * input.uv;
|
|
float distance = atlas_texture.Sample(sampler_state, float3(uv, input.altas_index)).r;
|
|
// return float4(distance, distance, distance, 1.0);
|
|
float alpha = smoothstep(0.47, 0.53, distance);
|
|
|
|
float4 color = input.color;
|
|
color.a *= alpha;
|
|
return color;
|
|
}
|