mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-04-21 06:46:46 -04:00
scene: use wlr_frame_scheduler
This commit is contained in:
parent
374a4a8d7e
commit
5424b2d44d
3 changed files with 16 additions and 7 deletions
|
|
@ -23,6 +23,7 @@
|
||||||
#include <wayland-server-core.h>
|
#include <wayland-server-core.h>
|
||||||
#include <wlr/types/wlr_compositor.h>
|
#include <wlr/types/wlr_compositor.h>
|
||||||
#include <wlr/types/wlr_damage_ring.h>
|
#include <wlr/types/wlr_damage_ring.h>
|
||||||
|
#include <wlr/types/wlr_frame_scheduler.h>
|
||||||
|
|
||||||
struct wlr_output;
|
struct wlr_output;
|
||||||
struct wlr_output_layout;
|
struct wlr_output_layout;
|
||||||
|
|
@ -165,6 +166,7 @@ struct wlr_scene_output {
|
||||||
struct wlr_addon addon;
|
struct wlr_addon addon;
|
||||||
|
|
||||||
struct wlr_damage_ring damage_ring;
|
struct wlr_damage_ring damage_ring;
|
||||||
|
struct wlr_frame_scheduler frame_scheduler;
|
||||||
|
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -601,9 +601,6 @@ static void server_new_output(struct wl_listener *listener, void *data) {
|
||||||
calloc(1, sizeof(struct tinywl_output));
|
calloc(1, sizeof(struct tinywl_output));
|
||||||
output->wlr_output = wlr_output;
|
output->wlr_output = wlr_output;
|
||||||
output->server = server;
|
output->server = server;
|
||||||
/* Sets up a listener for the frame notify event. */
|
|
||||||
output->frame.notify = output_frame;
|
|
||||||
wl_signal_add(&wlr_output->events.frame, &output->frame);
|
|
||||||
|
|
||||||
/* Sets up a listener for the destroy notify event. */
|
/* Sets up a listener for the destroy notify event. */
|
||||||
output->destroy.notify = output_destroy;
|
output->destroy.notify = output_destroy;
|
||||||
|
|
@ -621,6 +618,12 @@ static void server_new_output(struct wl_listener *listener, void *data) {
|
||||||
* output (such as DPI, scale factor, manufacturer, etc).
|
* output (such as DPI, scale factor, manufacturer, etc).
|
||||||
*/
|
*/
|
||||||
wlr_output_layout_add_auto(server->output_layout, wlr_output);
|
wlr_output_layout_add_auto(server->output_layout, wlr_output);
|
||||||
|
|
||||||
|
struct wlr_scene_output *scene_output =
|
||||||
|
wlr_scene_get_scene_output(server->scene, wlr_output);
|
||||||
|
/* Sets up a listener for the frame notify event. */
|
||||||
|
output->frame.notify = output_frame;
|
||||||
|
wl_signal_add(&scene_output->frame_scheduler.events.frame, &output->frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void xdg_toplevel_map(struct wl_listener *listener, void *data) {
|
static void xdg_toplevel_map(struct wl_listener *listener, void *data) {
|
||||||
|
|
|
||||||
|
|
@ -1204,6 +1204,7 @@ struct wlr_scene_output *wlr_scene_output_create(struct wlr_scene *scene,
|
||||||
wlr_addon_init(&scene_output->addon, &output->addons, scene, &output_addon_impl);
|
wlr_addon_init(&scene_output->addon, &output->addons, scene, &output_addon_impl);
|
||||||
|
|
||||||
wlr_damage_ring_init(&scene_output->damage_ring);
|
wlr_damage_ring_init(&scene_output->damage_ring);
|
||||||
|
wlr_frame_scheduler_init(&scene_output->frame_scheduler, output);
|
||||||
wl_list_init(&scene_output->damage_highlight_regions);
|
wl_list_init(&scene_output->damage_highlight_regions);
|
||||||
|
|
||||||
int prev_output_index = -1;
|
int prev_output_index = -1;
|
||||||
|
|
@ -1265,6 +1266,7 @@ void wlr_scene_output_destroy(struct wlr_scene_output *scene_output) {
|
||||||
|
|
||||||
wlr_addon_finish(&scene_output->addon);
|
wlr_addon_finish(&scene_output->addon);
|
||||||
wlr_damage_ring_finish(&scene_output->damage_ring);
|
wlr_damage_ring_finish(&scene_output->damage_ring);
|
||||||
|
wlr_frame_scheduler_finish(&scene_output->frame_scheduler);
|
||||||
wl_list_remove(&scene_output->link);
|
wl_list_remove(&scene_output->link);
|
||||||
wl_list_remove(&scene_output->output_commit.link);
|
wl_list_remove(&scene_output->output_commit.link);
|
||||||
wl_list_remove(&scene_output->output_mode.link);
|
wl_list_remove(&scene_output->output_mode.link);
|
||||||
|
|
@ -1597,6 +1599,8 @@ bool wlr_scene_output_commit(struct wlr_scene_output *scene_output) {
|
||||||
|
|
||||||
wlr_output_render_software_cursors(output, &damage);
|
wlr_output_render_software_cursors(output, &damage);
|
||||||
|
|
||||||
|
wlr_frame_scheduler_mark_render_submitted(&scene_output->frame_scheduler,
|
||||||
|
renderer);
|
||||||
wlr_renderer_end(renderer);
|
wlr_renderer_end(renderer);
|
||||||
pixman_region32_fini(&damage);
|
pixman_region32_fini(&damage);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue