diff --git a/src/gles_render/shaders.rs b/src/gles_render/shaders.rs index 5d89299..10a3704 100644 --- a/src/gles_render/shaders.rs +++ b/src/gles_render/shaders.rs @@ -163,7 +163,10 @@ uniform vec2 u_canvas; uniform vec4 u_bbox; void main() { - vec2 sp = u_bbox.xy + v_uv * u_bbox.zw; + // `v_uv.y` runs bottom-to-top in screen space (FBO origin is lower-left, as + // `ortho_rect` + the texture shader's flip establish), so the screen Y of + // this fragment is `bbox.y + (1 - v_uv.y) * bbox.h`. + vec2 sp = vec2( u_bbox.x + v_uv.x * u_bbox.z, u_bbox.y + ( 1.0 - v_uv.y ) * u_bbox.w ); vec2 luv = vec2( sp.x / u_canvas.x, 1.0 - sp.y / u_canvas.y ); vec4 col = texture2D( u_layer, luv ); float cov = texture2D( u_mask, vec2( v_uv.x, 1.0 - v_uv.y ) ).a;