diff options
Diffstat (limited to 'render')
-rw-r--r-- | render/gles2/renderer.c | 8 | ||||
-rw-r--r-- | render/wlr_renderer.c | 44 |
2 files changed, 34 insertions, 18 deletions
diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c index dcda45e9..99884622 100644 --- a/render/gles2/renderer.c +++ b/render/gles2/renderer.c @@ -155,7 +155,7 @@ static bool gles2_render_texture_with_matrix(struct wlr_renderer *wlr_renderer, } -static void gles2_render_quad(struct wlr_renderer *wlr_renderer, +static void gles2_render_quad_with_matrix(struct wlr_renderer *wlr_renderer, const float color[static 4], const float matrix[static 9]) { struct wlr_gles2_renderer *renderer = gles2_get_renderer_in_context(wlr_renderer); @@ -173,7 +173,7 @@ static void gles2_render_quad(struct wlr_renderer *wlr_renderer, GLES2_DEBUG_POP; } -static void gles2_render_ellipse(struct wlr_renderer *wlr_renderer, +static void gles2_render_ellipse_with_matrix(struct wlr_renderer *wlr_renderer, const float color[static 4], const float matrix[static 9]) { struct wlr_gles2_renderer *renderer = gles2_get_renderer_in_context(wlr_renderer); @@ -286,8 +286,8 @@ static const struct wlr_renderer_impl renderer_impl = { .clear = gles2_clear, .scissor = gles2_scissor, .render_texture_with_matrix = gles2_render_texture_with_matrix, - .render_quad = gles2_render_quad, - .render_ellipse = gles2_render_ellipse, + .render_quad_with_matrix = gles2_render_quad_with_matrix, + .render_ellipse_with_matrix = gles2_render_ellipse_with_matrix, .formats = gles2_renderer_formats, .resource_is_wl_drm_buffer = gles2_resource_is_wl_drm_buffer, .wl_drm_buffer_get_size = gles2_wl_drm_buffer_get_size, diff --git a/render/wlr_renderer.c b/render/wlr_renderer.c index d5a4d19f..e33c2bed 100644 --- a/render/wlr_renderer.c +++ b/render/wlr_renderer.c @@ -11,8 +11,8 @@ void wlr_renderer_init(struct wlr_renderer *renderer, assert(impl->clear); assert(impl->scissor); assert(impl->render_texture_with_matrix); - assert(impl->render_quad); - assert(impl->render_ellipse); + assert(impl->render_quad_with_matrix); + assert(impl->render_ellipse_with_matrix); assert(impl->formats); assert(impl->format_supported); assert(impl->texture_from_pixels); @@ -47,16 +47,14 @@ void wlr_renderer_scissor(struct wlr_renderer *r, struct wlr_box *box) { bool wlr_render_texture(struct wlr_renderer *r, struct wlr_texture *texture, const float projection[static 9], int x, int y, float alpha) { - int width, height; - wlr_texture_get_size(texture, &width, &height); + struct wlr_box box = { .x = x, .y = y }; + wlr_texture_get_size(texture, &box.width, &box.height); - float mat[9]; - wlr_matrix_identity(mat); - wlr_matrix_translate(mat, x, y); - wlr_matrix_scale(mat, width, height); - wlr_matrix_multiply(mat, projection, mat); + float matrix[9]; + wlr_matrix_project_box(matrix, &box, WL_OUTPUT_TRANSFORM_NORMAL, 0, + projection); - return wlr_render_texture_with_matrix(r, texture, mat, alpha); + return wlr_render_texture_with_matrix(r, texture, matrix, alpha); } bool wlr_render_texture_with_matrix(struct wlr_renderer *r, @@ -65,14 +63,32 @@ bool wlr_render_texture_with_matrix(struct wlr_renderer *r, return r->impl->render_texture_with_matrix(r, texture, matrix, alpha); } -void wlr_render_colored_quad(struct wlr_renderer *r, +void wlr_render_rect(struct wlr_renderer *r, const struct wlr_box *box, + const float color[static 4], const float projection[static 9]) { + float matrix[9]; + wlr_matrix_project_box(matrix, box, WL_OUTPUT_TRANSFORM_NORMAL, 0, + projection); + + wlr_render_quad_with_matrix(r, color, matrix); +} + +void wlr_render_quad_with_matrix(struct wlr_renderer *r, const float color[static 4], const float matrix[static 9]) { - r->impl->render_quad(r, color, matrix); + r->impl->render_quad_with_matrix(r, color, matrix); +} + +void wlr_render_ellipse(struct wlr_renderer *r, const struct wlr_box *box, + const float color[static 4], const float projection[static 9]) { + float matrix[9]; + wlr_matrix_project_box(matrix, box, WL_OUTPUT_TRANSFORM_NORMAL, 0, + projection); + + wlr_render_ellipse_with_matrix(r, color, matrix); } -void wlr_render_colored_ellipse(struct wlr_renderer *r, +void wlr_render_ellipse_with_matrix(struct wlr_renderer *r, const float color[static 4], const float matrix[static 9]) { - r->impl->render_ellipse(r, color, matrix); + r->impl->render_ellipse_with_matrix(r, color, matrix); } const enum wl_shm_format *wlr_renderer_get_formats( |