mirror of
https://github.com/mpv-player/mpv
synced 2025-03-25 04:38:01 +00:00
vo_opengl: partially re-enable glFlush() calls
It turns out the glFlush() call really helps in some cases, though only in audio timing mode (where we render, then wait for a while, then display the frame). Add a --opengl-early-flush=auto mode, which does exactly that. It's unclear whether this is fine on OSX (strange things going on there), but it should be. See #3670.
This commit is contained in:
parent
f64de3ea66
commit
202f695398
@ -4598,10 +4598,13 @@ The following video options are currently all specific to ``--vo=opengl`` and
|
||||
we may have to deal with additional padding, which can be tested with these
|
||||
options). Could be removed any time.
|
||||
|
||||
``--opengl-early-flush=<yes|no>``
|
||||
``--opengl-early-flush=<yes|no|auto>``
|
||||
Call ``glFlush()`` after rendering a frame and before attempting to display
|
||||
it (default: no). Can fix stuttering in some cases, in other cases probably
|
||||
causes it. For testing - could be removed any time.
|
||||
it (default: auto). Can fix stuttering in some cases, in other cases
|
||||
probably causes it. The ``auto`` mode will call ``glFlush()`` only if
|
||||
the renderer is going to wait for a while after rendering, instead of
|
||||
flipping GL front and backbuffers immediately (i.e. it doesn't call it
|
||||
in display-sync mode).
|
||||
|
||||
Miscellaneous
|
||||
-------------
|
||||
|
@ -322,6 +322,7 @@ static const struct gl_video_opts gl_video_opts_def = {
|
||||
.target_brightness = 250,
|
||||
.hdr_tone_mapping = TONE_MAPPING_HABLE,
|
||||
.tone_mapping_param = NAN,
|
||||
.early_flush = -1,
|
||||
};
|
||||
|
||||
static int validate_scaler_opt(struct mp_log *log, const m_option_t *opt,
|
||||
@ -412,7 +413,8 @@ const struct m_sub_options gl_video_conf = {
|
||||
OPT_INTRANGE("opengl-tex-pad-x", tex_pad_x, 0, 0, 4096),
|
||||
OPT_INTRANGE("opengl-tex-pad-y", tex_pad_y, 0, 0, 4096),
|
||||
OPT_SUBSTRUCT("", icc_opts, mp_icc_conf, 0),
|
||||
OPT_FLAG("opengl-early-flush", early_flush, 0),
|
||||
OPT_CHOICE("opengl-early-flush", early_flush, 0,
|
||||
({"no", 0}, {"yes", 1}, {"auto", -1})),
|
||||
|
||||
{0}
|
||||
},
|
||||
@ -2849,8 +2851,11 @@ done:
|
||||
// The playloop calls this last before waiting some time until it decides
|
||||
// to call flip_page(). Tell OpenGL to start execution of the GPU commands
|
||||
// while we sleep (this happens asynchronously).
|
||||
if (p->opts.early_flush)
|
||||
if ((p->opts.early_flush == -1 && !frame->display_synced) ||
|
||||
p->opts.early_flush == 1)
|
||||
{
|
||||
gl->Flush();
|
||||
}
|
||||
|
||||
p->frames_rendered++;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user