50 lines
1.2 KiB
Text
50 lines
1.2 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 UniformShaderData {
|
||
|
|
#0 image2D image,
|
||
|
|
float4 rect,
|
||
|
|
bool flipy
|
||
|
|
}
|
||
|
|
|
||
|
|
stage vertex vert_layer_pass(
|
||
|
|
input {},
|
||
|
|
vertex in {
|
||
|
|
#0 float2 pos,
|
||
|
|
#1 float2 uv
|
||
|
|
},
|
||
|
|
fragment out { float2 uv }
|
||
|
|
) {
|
||
|
|
out.uv = in.uv;
|
||
|
|
stage.pos = float4(in.pos, 0.0, 1.0);
|
||
|
|
}
|
||
|
|
|
||
|
|
stage fragment upscale_top_center(
|
||
|
|
input { View view, UniformShaderData pass },
|
||
|
|
fragment in { float2 uv }
|
||
|
|
) {
|
||
|
|
|
||
|
|
//this is the uv in the full screen area
|
||
|
|
float y = in.uv.y;
|
||
|
|
if(input.pass.flipy) { y = 1.0 - y; }
|
||
|
|
float2 uv = float2(in.uv.x, y);
|
||
|
|
|
||
|
|
float2 dest_size = floor(input.view.target_region_size.zw);
|
||
|
|
float4 local_rect = float4(input.pass.rect.xy / dest_size, input.pass.rect.zw / dest_size);
|
||
|
|
float2 local_uv = (uv - local_rect.xy) / local_rect.zw;
|
||
|
|
stage.color[0] = texture(input.pass.image, local_uv);
|
||
|
|
|
||
|
|
if(local_uv.x < 0.0 || local_uv.y < 0.0 || local_uv.x > 1.0 || local_uv.y > 1.0){
|
||
|
|
stage.color[0] = float4(0, 0, 0, 1);
|
||
|
|
}
|
||
|
|
return;
|
||
|
|
}
|