mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	move matrix model code to matrix.h
This commit is contained in:
		
							parent
							
								
									7474f00591
								
							
						
					
					
						commit
						d13114520a
					
				
					 5 changed files with 68 additions and 56 deletions
				
			
		| 
						 | 
				
			
			@ -1,6 +1,8 @@
 | 
			
		|||
#include <string.h>
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include <wayland-server-protocol.h>
 | 
			
		||||
#include <wlr/types/wlr_box.h>
 | 
			
		||||
#include <wlr/types/wlr_output.h>
 | 
			
		||||
#include <wlr/render/matrix.h>
 | 
			
		||||
 | 
			
		||||
/* Obtains the index for the given row/column */
 | 
			
		||||
| 
						 | 
				
			
			@ -158,3 +160,47 @@ void wlr_matrix_texture(float mat[static 16], int32_t width, int32_t height,
 | 
			
		|||
	mat[10] = 1.0f;
 | 
			
		||||
	mat[15] = 1.0f;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wlr_matrix_box_model(float (*mat)[16], struct wlr_box *box,
 | 
			
		||||
		enum wl_output_transform transform, float rotation) {
 | 
			
		||||
	int x = box->x;
 | 
			
		||||
	int y = box->y;
 | 
			
		||||
	int width = box->width;
 | 
			
		||||
	int height = box->height;
 | 
			
		||||
 | 
			
		||||
	float translate_center[16];
 | 
			
		||||
	wlr_matrix_translate(&translate_center,
 | 
			
		||||
			(int)x + width / 2, (int)y + height / 2, 0);
 | 
			
		||||
 | 
			
		||||
	float rotate[16];
 | 
			
		||||
	wlr_matrix_rotate(&rotate, rotation);
 | 
			
		||||
 | 
			
		||||
	float translate_origin[16];
 | 
			
		||||
	wlr_matrix_translate(&translate_origin, -width / 2,
 | 
			
		||||
			-height / 2, 0);
 | 
			
		||||
 | 
			
		||||
	float scale[16];
 | 
			
		||||
	wlr_matrix_scale(&scale, width, height, 1);
 | 
			
		||||
 | 
			
		||||
	wlr_matrix_mul(&translate_center, &rotate, mat);
 | 
			
		||||
	wlr_matrix_mul(mat, &translate_origin, mat);
 | 
			
		||||
	wlr_matrix_mul(mat, &scale, mat);
 | 
			
		||||
 | 
			
		||||
	if (transform != WL_OUTPUT_TRANSFORM_NORMAL) {
 | 
			
		||||
		float surface_translate_center[16];
 | 
			
		||||
		wlr_matrix_translate(&surface_translate_center, 0.5, 0.5, 0);
 | 
			
		||||
 | 
			
		||||
		float surface_transform[16];
 | 
			
		||||
		wlr_matrix_transform(surface_transform,
 | 
			
		||||
				wlr_output_transform_invert(transform));
 | 
			
		||||
 | 
			
		||||
		float surface_translate_origin[16];
 | 
			
		||||
		wlr_matrix_translate(&surface_translate_origin, -0.5, -0.5, 0);
 | 
			
		||||
 | 
			
		||||
		wlr_matrix_mul(mat, &surface_translate_center,
 | 
			
		||||
				mat);
 | 
			
		||||
		wlr_matrix_mul(mat, &surface_transform, mat);
 | 
			
		||||
		wlr_matrix_mul(mat, &surface_translate_origin,
 | 
			
		||||
			mat);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue