aorii/src/renderer/shader/aorii_sdf_text.slang
2024-12-17 10:54:19 +08:00

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.uv / 64;
float distance = atlas_texture.Sample(sampler_state, float3(uv, input.altas_index)).r;
// return float4(distance, distance, distance, 1.0);
float alpha = smoothstep(0.49, 0.51, distance);
float4 color = input.color;
color.a *= alpha;
return color;
}