diff options
author | Alexander Orzechowski <alex@ozal.ski> | 2023-06-19 18:17:23 -0400 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2023-06-20 09:04:35 +0000 |
commit | 2ac31fc6305364fc2ab9f9706db825b3df366c6f (patch) | |
tree | 4406735051d3430cb0faa93425bb8d3a86bb9d8a | |
parent | 06c0b0a204e36f90e7e1c78d8e67035620fd5516 (diff) |
wlr_scene: Introduce wlr_scene_buffer_set_filter_mode
-rw-r--r-- | include/wlr/types/wlr_scene.h | 10 | ||||
-rw-r--r-- | types/scene/wlr_scene.c | 11 |
2 files changed, 20 insertions, 1 deletions
diff --git a/include/wlr/types/wlr_scene.h b/include/wlr/types/wlr_scene.h index c1b6f130..8013b660 100644 --- a/include/wlr/types/wlr_scene.h +++ b/include/wlr/types/wlr_scene.h @@ -22,6 +22,7 @@ #include <pixman.h> #include <time.h> #include <wayland-server-core.h> +#include <wlr/render/wlr_renderer.h> #include <wlr/types/wlr_damage_ring.h> #include <wlr/types/wlr_linux_dmabuf_v1.h> #include <wlr/util/addon.h> @@ -168,6 +169,7 @@ struct wlr_scene_buffer { // private state float opacity; + enum wlr_scale_filter_mode filter_mode; uint64_t active_outputs; struct wlr_texture *texture; struct wlr_fbox src_box; @@ -424,6 +426,12 @@ void wlr_scene_buffer_set_opacity(struct wlr_scene_buffer *scene_buffer, float opacity); /** +* Sets the filter mode to use when scaling the buffer +*/ +void wlr_scene_buffer_set_filter_mode(struct wlr_scene_buffer *scene_buffer, + enum wlr_scale_filter_mode filter_mode); + +/** * Calls the buffer's frame_done signal. */ void wlr_scene_buffer_send_frame_done(struct wlr_scene_buffer *scene_buffer, @@ -455,7 +463,7 @@ bool wlr_scene_output_commit(struct wlr_scene_output *scene_output); * Render and populate given output state. */ bool wlr_scene_output_build_state(struct wlr_scene_output *scene_output, - struct wlr_output_state *state); + struct wlr_output_state *state); /** * Call wlr_surface_send_frame_done() on all surfaces in the scene rendered by diff --git a/types/scene/wlr_scene.c b/types/scene/wlr_scene.c index 7ee49207..d20916a7 100644 --- a/types/scene/wlr_scene.c +++ b/types/scene/wlr_scene.c @@ -816,6 +816,16 @@ void wlr_scene_buffer_set_opacity(struct wlr_scene_buffer *scene_buffer, scene_node_update(&scene_buffer->node, NULL); } +void wlr_scene_buffer_set_filter_mode(struct wlr_scene_buffer *scene_buffer, + enum wlr_scale_filter_mode filter_mode) { + if (scene_buffer->filter_mode == filter_mode) { + return; + } + + scene_buffer->filter_mode = filter_mode; + scene_node_update(&scene_buffer->node, NULL); +} + static struct wlr_texture *scene_buffer_get_texture( struct wlr_scene_buffer *scene_buffer, struct wlr_renderer *renderer) { struct wlr_client_buffer *client_buffer = @@ -1146,6 +1156,7 @@ static void scene_node_render(struct wlr_scene_node *node, const struct render_d .transform = transform, .clip = &render_region, .alpha = &scene_buffer->opacity, + .filter_mode = scene_buffer->filter_mode, }); wl_signal_emit_mutable(&scene_buffer->events.output_present, data->output); |