mirror of https://github.com/mpv-player/mpv
vo_gpu_next: call start_frame in vulkan/context.c
In practice, this is for wayland. vo_gpu_next doesn't check the check_visible parameter since it didn't descend into the vulkan/context.c file when starting a frame. To make this happen, just call the start_frame function pointer but pass NULL as the ra_fbo. In there, we can do the visibility checks and after that bail out of the start_frame function if ra_fbo is NULL.
This commit is contained in:
parent
acde63f05a
commit
662c793a55
|
@ -577,6 +577,12 @@ static void draw_frame(struct vo *vo, struct vo_frame *frame)
|
|||
p->last_id = id;
|
||||
}
|
||||
|
||||
// Doesn't draw anything. Only checks for visibility.
|
||||
struct ra_swapchain *sw = p->ra_ctx->swapchain;
|
||||
bool should_draw = sw->fns->start_frame(sw, NULL);
|
||||
if (!should_draw)
|
||||
return;
|
||||
|
||||
struct pl_swapchain_frame swframe;
|
||||
if (!pl_swapchain_start_frame(p->sw, &swframe))
|
||||
return;
|
||||
|
|
|
@ -239,11 +239,15 @@ static bool start_frame(struct ra_swapchain *sw, struct ra_fbo *out_fbo)
|
|||
{
|
||||
struct priv *p = sw->priv;
|
||||
struct pl_swapchain_frame frame;
|
||||
|
||||
bool visible = true;
|
||||
if (p->params.check_visible)
|
||||
visible = p->params.check_visible(sw->ctx);
|
||||
if (!visible)
|
||||
return false;
|
||||
|
||||
// If out_fbo is NULL, this was called from vo_gpu_next. Bail out.
|
||||
if (out_fbo == NULL || !visible)
|
||||
return visible;
|
||||
|
||||
if (!pl_swapchain_start_frame(p->vk->swapchain, &frame))
|
||||
return false;
|
||||
if (!mppl_wrap_tex(sw->ctx->ra, frame.fbo, &p->proxy_tex))
|
||||
|
|
Loading…
Reference in New Issue