#include "aorii_util.slang" struct FontParams { float smoothing; // 平滑度 float thickness; // 字体粗细 float outline_width; // 描边宽度 float4 outline_color; // 描边颜色 } ParameterBlock 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 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; }