aboutsummaryrefslogtreecommitdiff
path: root/render/pass.c
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2023-06-12 13:43:18 +0200
committerSimon Ser <contact@emersion.fr>2023-11-22 00:55:56 +0100
commit40633ae7fda70b8261e0c8d689795bf0dfb40e57 (patch)
tree562a25f7279be8bfa9f42147db5578552c4ef318 /render/pass.c
parent5dd614b9adc97bf1c89c8e2ebe8504841f8635ea (diff)
render: drop legacy render pass
All built-in renderers now implement the new API.
Diffstat (limited to 'render/pass.c')
-rw-r--r--render/pass.c148
1 files changed, 0 insertions, 148 deletions
diff --git a/render/pass.c b/render/pass.c
index 243f780b..90222827 100644
--- a/render/pass.c
+++ b/render/pass.c
@@ -1,16 +1,6 @@
#include <assert.h>
-#include <stdlib.h>
#include <string.h>
#include <wlr/render/interface.h>
-#include <wlr/render/wlr_renderer.h>
-#include <wlr/types/wlr_matrix.h>
-#include "render/pass.h"
-
-struct wlr_render_pass_legacy {
- struct wlr_render_pass base;
- struct wlr_renderer *renderer;
- int width, height;
-};
void wlr_render_pass_init(struct wlr_render_pass *render_pass,
const struct wlr_render_pass_impl *impl) {
@@ -84,141 +74,3 @@ void wlr_render_rect_options_get_box(const struct wlr_render_rect_options *optio
*box = options->box;
}
-
-static const struct wlr_render_pass_impl legacy_impl;
-
-static struct wlr_render_pass_legacy *legacy_pass_from_pass(struct wlr_render_pass *pass) {
- assert(pass->impl == &legacy_impl);
- struct wlr_render_pass_legacy *legacy = wl_container_of(pass, legacy, base);
- return legacy;
-}
-
-static bool legacy_submit(struct wlr_render_pass *wlr_pass) {
- struct wlr_render_pass_legacy *pass = legacy_pass_from_pass(wlr_pass);
- wlr_renderer_end(pass->renderer);
- free(pass);
- return true;
-}
-
-static void get_clip_region(struct wlr_render_pass_legacy *pass,
- const pixman_region32_t *in, pixman_region32_t *out) {
- if (in != NULL) {
- pixman_region32_init(out);
- pixman_region32_copy(out, in);
- } else {
- pixman_region32_init_rect(out, 0, 0, pass->width, pass->height);
- }
-}
-
-static void scissor(struct wlr_renderer *renderer, const pixman_box32_t *rect) {
- struct wlr_box box = {
- .x = rect->x1,
- .y = rect->y1,
- .width = rect->x2 - rect->x1,
- .height = rect->y2 - rect->y1,
- };
- wlr_renderer_scissor(renderer, &box);
-}
-
-static void legacy_add_texture(struct wlr_render_pass *wlr_pass,
- const struct wlr_render_texture_options *options) {
- struct wlr_render_pass_legacy *pass = legacy_pass_from_pass(wlr_pass);
- struct wlr_texture *texture = options->texture;
-
- struct wlr_fbox src_box;
- wlr_render_texture_options_get_src_box(options, &src_box);
- struct wlr_box dst_box;
- wlr_render_texture_options_get_dst_box(options, &dst_box);
- float alpha = wlr_render_texture_options_get_alpha(options);
-
- float proj[9], matrix[9];
- wlr_matrix_identity(proj);
- wlr_matrix_project_box(matrix, &dst_box, options->transform, 0.0, proj);
-
- pixman_region32_t clip;
- get_clip_region(pass, options->clip, &clip);
-
- float black[4] = {0};
- int rects_len = 0;
- const pixman_box32_t *rects = pixman_region32_rectangles(&clip, &rects_len);
- for (int i = 0; i < rects_len; i++) {
- scissor(pass->renderer, &rects[i]);
-
- if (options->blend_mode == WLR_RENDER_BLEND_MODE_NONE) {
- wlr_renderer_clear(pass->renderer, black);
- }
-
- wlr_render_subtexture_with_matrix(pass->renderer, texture, &src_box, matrix, alpha);
- }
-
- wlr_renderer_scissor(pass->renderer, NULL);
- pixman_region32_fini(&clip);
-}
-
-static void legacy_add_rect(struct wlr_render_pass *wlr_pass,
- const struct wlr_render_rect_options *options) {
- struct wlr_render_pass_legacy *pass = legacy_pass_from_pass(wlr_pass);
-
- float proj[9], matrix[9];
- wlr_matrix_identity(proj);
- wlr_matrix_project_box(matrix, &options->box, WL_OUTPUT_TRANSFORM_NORMAL, 0.0, proj);
-
- pixman_region32_t clip;
- get_clip_region(pass, options->clip, &clip);
- pixman_region32_intersect_rect(&clip, &clip,
- options->box.x, options->box.y, options->box.width, options->box.height);
-
- float color[4] = {
- options->color.r,
- options->color.g,
- options->color.b,
- options->color.a,
- };
-
- int rects_len = 0;
- const pixman_box32_t *rects = pixman_region32_rectangles(&clip, &rects_len);
- for (int i = 0; i < rects_len; i++) {
- scissor(pass->renderer, &rects[i]);
- switch (options->blend_mode) {
- case WLR_RENDER_BLEND_MODE_PREMULTIPLIED:
- wlr_render_quad_with_matrix(pass->renderer, color, matrix);
- break;
- case WLR_RENDER_BLEND_MODE_NONE:
- wlr_renderer_clear(pass->renderer, color);
- break;
- }
- }
-
- wlr_renderer_scissor(pass->renderer, NULL);
- pixman_region32_fini(&clip);
-}
-
-static const struct wlr_render_pass_impl legacy_impl = {
- .submit = legacy_submit,
- .add_texture = legacy_add_texture,
- .add_rect = legacy_add_rect,
-};
-
-struct wlr_render_pass *begin_legacy_buffer_render_pass(struct wlr_renderer *renderer,
- struct wlr_buffer *buffer) {
- if (renderer->rendering) {
- return NULL;
- }
-
- struct wlr_render_pass_legacy *pass = calloc(1, sizeof(*pass));
- if (pass == NULL) {
- return NULL;
- }
-
- wlr_render_pass_init(&pass->base, &legacy_impl);
- pass->renderer = renderer;
- pass->width = buffer->width;
- pass->height = buffer->height;
-
- if (!wlr_renderer_begin_with_buffer(renderer, buffer)) {
- free(pass);
- return NULL;
- }
-
- return &pass->base;
-}