57 lines
No EOL
1.6 KiB
Text
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);
|
|
} |