util/matrix: Introduce wlr_matrix_project_fbox

Same as wlr_matrix_project_box but takes an fbox

And use it with gles2
This commit is contained in:
Alexander Orzechowski 2025-01-27 14:26:47 -05:00
parent 26d24d2229
commit 088b7c98c5
3 changed files with 18 additions and 12 deletions

View file

@ -4,6 +4,7 @@
#include <wayland-server-protocol.h> #include <wayland-server-protocol.h>
struct wlr_box; struct wlr_box;
struct wlr_fbox;
/** Writes the identity matrix into mat */ /** Writes the identity matrix into mat */
void wlr_matrix_identity(float mat[static 9]); void wlr_matrix_identity(float mat[static 9]);
@ -30,6 +31,8 @@ void wlr_matrix_transform(float mat[static 9],
*/ */
void wlr_matrix_project_box(float mat[static 9], const struct wlr_box *box); void wlr_matrix_project_box(float mat[static 9], const struct wlr_box *box);
void wlr_matrix_project_fbox(float mat[static 9], const struct wlr_fbox *box);
/** /**
* Writes a 2D orthographic projection matrix to mat of (width, height). * Writes a 2D orthographic projection matrix to mat of (width, height).
* *

View file

@ -134,9 +134,7 @@ static void set_proj_matrix(GLint loc, float proj[9], const struct wlr_box *box)
static void set_tex_matrix(GLint loc, enum wl_output_transform trans, static void set_tex_matrix(GLint loc, enum wl_output_transform trans,
const struct wlr_fbox *box) { const struct wlr_fbox *box) {
float tex_matrix[9]; float tex_matrix[9];
wlr_matrix_identity(tex_matrix); wlr_matrix_project_fbox(tex_matrix, box);
wlr_matrix_translate(tex_matrix, box->x, box->y);
wlr_matrix_scale(tex_matrix, box->width, box->height);
// since textures have a different origin point we have to transform // since textures have a different origin point we have to transform
// differently if we are rotating // differently if we are rotating

View file

@ -111,14 +111,19 @@ void matrix_projection(float mat[static 9], int width, int height) {
mat[8] = 1.0f; mat[8] = 1.0f;
} }
void wlr_matrix_project_box(float mat[static 9], const struct wlr_box *box) { void wlr_matrix_project_fbox(float mat[static 9], const struct wlr_fbox *box) {
int x = box->x;
int y = box->y;
int width = box->width;
int height = box->height;
wlr_matrix_identity(mat); wlr_matrix_identity(mat);
wlr_matrix_translate(mat, x, y); wlr_matrix_translate(mat, box->x, box->y);
wlr_matrix_scale(mat, box->width, box->height);
wlr_matrix_scale(mat, width, height); }
void wlr_matrix_project_box(float mat[static 9], const struct wlr_box *box) {
struct wlr_fbox fbox = {
.x = box->x,
.y = box->y,
.width = box->width,
.height = box->height,
};
wlr_matrix_project_fbox(mat, &fbox);
} }