50 lines
No EOL
1.5 KiB
Text
50 lines
No EOL
1.5 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 pages[8]
|
|
}
|
|
|
|
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.pages[0], in.uv.xy);
|
|
if(page == 1) { msdf_sample = texture(input.font.pages[1], in.uv.xy); }
|
|
if(page == 2) { msdf_sample = texture(input.font.pages[2], in.uv.xy); }
|
|
if(page == 3) { msdf_sample = texture(input.font.pages[3], in.uv.xy); }
|
|
if(page == 4) { msdf_sample = texture(input.font.pages[4], in.uv.xy); }
|
|
if(page == 5) { msdf_sample = texture(input.font.pages[5], in.uv.xy); }
|
|
if(page == 6) { msdf_sample = texture(input.font.pages[6], in.uv.xy); }
|
|
if(page == 7) { msdf_sample = texture(input.font.pages[7], 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 = float(median > 0.5);
|
|
|
|
stage.color[0] = float4(in.color.rgb, in.color.a * opacity);
|
|
} |