mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-04-14 08:22:25 -04:00
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:
parent
26d24d2229
commit
088b7c98c5
3 changed files with 18 additions and 12 deletions
|
|
@ -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).
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue