mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-11-02 09:01:38 -05:00
presentation-time: make API more flexible
The wlr_presentation_feedback struct now tracks presentation feedback for multiple resources (but still a single surface content update). This allows the compositor to properly send presentation events even when there is more than one frame of latency or when it references a surface's buffer.
This commit is contained in:
parent
3084cee7bc
commit
533ea6d7ef
2 changed files with 120 additions and 70 deletions
|
|
@ -28,17 +28,19 @@ struct wlr_presentation {
|
|||
};
|
||||
|
||||
struct wlr_presentation_feedback {
|
||||
struct wl_resource *resource;
|
||||
struct wlr_presentation *presentation;
|
||||
struct wlr_surface *surface;
|
||||
struct wlr_surface *surface; // NULL if the surface has been destroyed
|
||||
struct wl_list link; // wlr_presentation::feedbacks
|
||||
|
||||
struct wl_list resources; // wl_resource_get_link
|
||||
|
||||
// The surface contents were committed.
|
||||
bool committed;
|
||||
// The surface contents were sampled by the compositor and are to be
|
||||
// presented on the next flip. Can become true only after committed becomes
|
||||
// true.
|
||||
bool sampled;
|
||||
bool presented;
|
||||
|
||||
struct wl_listener surface_commit;
|
||||
struct wl_listener surface_destroy;
|
||||
|
|
@ -58,10 +60,25 @@ struct wlr_backend;
|
|||
struct wlr_presentation *wlr_presentation_create(struct wl_display *display,
|
||||
struct wlr_backend *backend);
|
||||
void wlr_presentation_destroy(struct wlr_presentation *presentation);
|
||||
void wlr_presentation_send_surface_presented(
|
||||
struct wlr_presentation *presentation, struct wlr_surface *surface,
|
||||
struct wlr_presentation_event *event);
|
||||
void wlr_presentation_surface_sampled(
|
||||
/**
|
||||
* Mark the current surface's buffer as sampled.
|
||||
*
|
||||
* The compositor must call this function when it uses the surface's current
|
||||
* contents (e.g. when rendering the surface's current texture, when
|
||||
* referencing its current buffer, or when directly scanning out its current
|
||||
* buffer). A wlr_presentation_feedback is returned. The compositor should call
|
||||
* wlr_presentation_feedback_send_presented if this content has been displayed,
|
||||
* then wlr_presentation_feedback_destroy.
|
||||
*
|
||||
* NULL is returned if the client hasn't requested presentation feedback for
|
||||
* this surface.
|
||||
*/
|
||||
struct wlr_presentation_feedback *wlr_presentation_surface_sampled(
|
||||
struct wlr_presentation *presentation, struct wlr_surface *surface);
|
||||
void wlr_presentation_feedback_send_presented(
|
||||
struct wlr_presentation_feedback *feedback,
|
||||
struct wlr_presentation_event *event);
|
||||
void wlr_presentation_feedback_destroy(
|
||||
struct wlr_presentation_feedback *feedback);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue