mirror of
https://github.com/mpv-player/mpv
synced 2025-04-17 20:58:20 +00:00
vo_gpu: fix fragment coordinate calculation when drawing checkerboard
When redrawing cached frames while the fbo texture is flipped, the texture after drawing to screen pass will be flipped when blitting. However, when rendering the checkerboard, the fragment coordinate doesn't take this into account, so the coordinate before flipping is used, resulting in different checkerboard location when toggling between flipped and non-flipped state. This can be reproduced with --vo=gpu and --gpu-api=opengl: the checkerboard patterns when playing and pausing are different (vertically flipped). Fix this by flipping the fragment y coordinate if the fbo is flipped when calculating checkerboard coordinate.
This commit is contained in:
parent
531704e35d
commit
74f2260cd6
@ -3078,7 +3078,9 @@ static void pass_draw_to_screen(struct gl_video *p, const struct ra_fbo *fbo, in
|
||||
if (p->opts.alpha_mode == ALPHA_BLEND_TILES) {
|
||||
// Draw checkerboard pattern to indicate transparency
|
||||
GLSLF("// transparency checkerboard\n");
|
||||
GLSL(bvec2 tile = lessThan(fract(gl_FragCoord.xy * 1.0/32.0), vec2(0.5));)
|
||||
GLSLF("vec2 tile_coord = vec2(gl_FragCoord.x, %d.0 + %f * gl_FragCoord.y);",
|
||||
fbo->flip ? p->dst_rect.y1 : 0, fbo->flip ? -1.0 : 1.0);
|
||||
GLSL(bvec2 tile = lessThan(fract(tile_coord * 1.0 / 32.0), vec2(0.5));)
|
||||
GLSL(vec3 background = vec3(tile.x == tile.y ? 0.93 : 0.87);)
|
||||
GLSL(color.rgb += background.rgb * (1.0 - color.a);)
|
||||
GLSL(color.a = 1.0;)
|
||||
|
Loading…
Reference in New Issue
Block a user