forked from mirror/dwl
implement the presentation time protocol
This lets applications, such as mpv with --video-sync=display-resample, know accurately when frames are displayed and ensure smooth video playback.
This commit is contained in:
parent
3b05eadeaf
commit
d175a58d73
1 changed files with 6 additions and 0 deletions
6
dwl.c
6
dwl.c
|
@ -29,6 +29,7 @@
|
||||||
#include <wlr/types/wlr_output_layout.h>
|
#include <wlr/types/wlr_output_layout.h>
|
||||||
#include <wlr/types/wlr_output_management_v1.h>
|
#include <wlr/types/wlr_output_management_v1.h>
|
||||||
#include <wlr/types/wlr_pointer.h>
|
#include <wlr/types/wlr_pointer.h>
|
||||||
|
#include <wlr/types/wlr_presentation_time.h>
|
||||||
#include <wlr/types/wlr_primary_selection.h>
|
#include <wlr/types/wlr_primary_selection.h>
|
||||||
#include <wlr/types/wlr_primary_selection_v1.h>
|
#include <wlr/types/wlr_primary_selection_v1.h>
|
||||||
#include <wlr/types/wlr_screencopy_v1.h>
|
#include <wlr/types/wlr_screencopy_v1.h>
|
||||||
|
@ -317,6 +318,7 @@ static struct wl_list independents;
|
||||||
static struct wlr_idle *idle;
|
static struct wlr_idle *idle;
|
||||||
static struct wlr_layer_shell_v1 *layer_shell;
|
static struct wlr_layer_shell_v1 *layer_shell;
|
||||||
static struct wlr_output_manager_v1 *output_mgr;
|
static struct wlr_output_manager_v1 *output_mgr;
|
||||||
|
static struct wlr_presentation *presentation;
|
||||||
static struct wlr_virtual_keyboard_manager_v1 *virtual_keyboard_mgr;
|
static struct wlr_virtual_keyboard_manager_v1 *virtual_keyboard_mgr;
|
||||||
|
|
||||||
static struct wlr_cursor *cursor;
|
static struct wlr_cursor *cursor;
|
||||||
|
@ -1653,6 +1655,8 @@ render(struct wlr_surface *surface, int sx, int sy, void *data)
|
||||||
/* This lets the client know that we've displayed that frame and it can
|
/* This lets the client know that we've displayed that frame and it can
|
||||||
* prepare another one now if it likes. */
|
* prepare another one now if it likes. */
|
||||||
wlr_surface_send_frame_done(surface, rdata->when);
|
wlr_surface_send_frame_done(surface, rdata->when);
|
||||||
|
|
||||||
|
wlr_presentation_surface_sampled_on_output(presentation, surface, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -2116,6 +2120,8 @@ setup(void)
|
||||||
wl_signal_add(&output_mgr->events.apply, &output_mgr_apply);
|
wl_signal_add(&output_mgr->events.apply, &output_mgr_apply);
|
||||||
wl_signal_add(&output_mgr->events.test, &output_mgr_test);
|
wl_signal_add(&output_mgr->events.test, &output_mgr_test);
|
||||||
|
|
||||||
|
presentation = wlr_presentation_create(dpy, backend);
|
||||||
|
|
||||||
#ifdef XWAYLAND
|
#ifdef XWAYLAND
|
||||||
/*
|
/*
|
||||||
* Initialise the XWayland X server.
|
* Initialise the XWayland X server.
|
||||||
|
|
Loading…
Reference in a new issue