wlr_scene: Make wlr_scene_render_output private

This function sidesteps damage tracking and output awareness on
buffers/surfaces. This function isn't a great fit for the API.

Let's also inline the function and simplify it.
This commit is contained in:
Alexander Orzechowski 2022-04-06 07:59:54 -04:00
parent 933ff0e60c
commit 7e383c6a6a
2 changed files with 9 additions and 35 deletions

View File

@ -225,14 +225,6 @@ struct wlr_scene_node *wlr_scene_node_at(struct wlr_scene_node *node,
* Create a new scene-graph.
*/
struct wlr_scene *wlr_scene_create(void);
/**
* Manually render the scene-graph on an output. The compositor needs to call
* wlr_renderer_begin before and wlr_renderer_end after calling this function.
* Damage is given in output-buffer-local coordinates and can be set to NULL to
* disable damage tracking.
*/
void wlr_scene_render_output(struct wlr_scene *scene, struct wlr_output *output,
int lx, int ly, pixman_region32_t *damage);
/**
* Handle presentation feedback for all surfaces in the scene, assuming that
* scene outputs and the scene rendering functions are used.

View File

@ -945,31 +945,6 @@ static void scene_node_for_each_node(struct wlr_scene_node *node,
}
}
void wlr_scene_render_output(struct wlr_scene *scene, struct wlr_output *output,
int lx, int ly, pixman_region32_t *damage) {
pixman_region32_t full_region;
pixman_region32_init_rect(&full_region, 0, 0, output->width, output->height);
if (damage == NULL) {
damage = &full_region;
}
struct wlr_renderer *renderer = output->renderer;
assert(renderer);
if (output->enabled && pixman_region32_not_empty(damage)) {
struct render_data data = {
.output = output,
.damage = damage,
.presentation = scene->presentation,
};
scene_node_for_each_node(&scene->node, -lx, -ly,
render_node_iterator, &data);
wlr_renderer_scissor(renderer, NULL);
}
pixman_region32_fini(&full_region);
}
static void scene_handle_presentation_destroy(struct wl_listener *listener,
void *data) {
struct wlr_scene *scene =
@ -1254,8 +1229,15 @@ bool wlr_scene_output_commit(struct wlr_scene_output *scene_output) {
wlr_renderer_clear(renderer, (float[4]){ 0.0, 0.0, 0.0, 1.0 });
}
wlr_scene_render_output(scene_output->scene, output,
scene_output->x, scene_output->y, &damage);
struct render_data data = {
.output = output,
.damage = &damage,
.presentation = scene_output->scene->presentation,
};
scene_node_for_each_node(&scene_output->scene->node,
-scene_output->x, -scene_output->y,
render_node_iterator, &data);
wlr_renderer_scissor(renderer, NULL);
wlr_output_render_software_cursors(output, &damage);
wlr_renderer_end(renderer);