CabinGame/Luxe/shaders/pixel_text.emsl
2021-02-09 15:37:50 +01:00

57 lines
No EOL
1.6 KiB
Text

input View {
mat4 mvp,
mat4 proj,
mat4 proj_inverse,
mat4 view,
mat4 world, //geometry.world atm
float2 fov, //fov.x, fov.y
float2 resolution,
float4 target_region,
float4 target_region_size
}
input Font {
image2D page0,
image2D page1,
image2D page2,
image2D page3,
image2D page4,
image2D page5,
image2D page6,
image2D page7
}
stage vertex vert(
input { View view },
vertex in { #0 float4 pos, #1 float4 color, #2 float2 uv },
fragment out { float4 color, float2 uv, float page })
{
out.color = in.color;
out.uv = in.uv;
out.page = in.pos.w;
stage.pos = input.view.mvp * float4(in.pos.xyz, 1.0);
}
stage fragment frag(
input { Font font },
fragment in { float4 color, float2 uv, float page })
{
int page = int(in.page);
float4 msdf_sample = texture(input.font.page0, in.uv.xy);
if(page == 1) { msdf_sample = texture(input.font.page1, in.uv.xy); }
if(page == 2) { msdf_sample = texture(input.font.page2, in.uv.xy); }
if(page == 3) { msdf_sample = texture(input.font.page3, in.uv.xy); }
if(page == 4) { msdf_sample = texture(input.font.page4, in.uv.xy); }
if(page == 5) { msdf_sample = texture(input.font.page5, in.uv.xy); }
if(page == 6) { msdf_sample = texture(input.font.page6, in.uv.xy); }
if(page == 7) { msdf_sample = texture(input.font.page7, in.uv.xy); }
float r = msdf_sample.r;
float g = msdf_sample.g;
float b = msdf_sample.b;
float median = max(min(r, g), min(max(r, g), b));
float opacity = step(0.5, median);
stage.color[0] = float4(in.color.rgb, in.color.a * opacity);
}