diff options
author | Derek Foreman <derekf@osg.samsung.com> | 2015-05-07 11:54:18 -0500 |
---|---|---|
committer | Daniel Stone <daniels@collabora.com> | 2015-08-06 16:30:11 +0100 |
commit | 75ead05dd2aa917c34bfe312f7e3c1a7944cda9a (patch) | |
tree | 2a57af555c904c36c799f32ea19551423b89dbeb /src | |
parent | f9318d145262444e2b671b40122fec9cab39b609 (diff) | |
download | weston-75ead05dd2aa917c34bfe312f7e3c1a7944cda9a.tar.gz |
rpi-renderer: use weston_output matrix instead of a private matrix
We already do this math in compositor.c so let's not duplicate it here.
Additionally, the copy here has broken zoom, so this also fixes zooming.
Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Acked-by: Daniel Stone <daniels@collabora.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/rpi-renderer.c | 68 |
1 files changed, 3 insertions, 65 deletions
diff --git a/src/rpi-renderer.c b/src/rpi-renderer.c index 204802ed..ae0ac7a2 100644 --- a/src/rpi-renderer.c +++ b/src/rpi-renderer.c @@ -153,7 +153,6 @@ struct rpir_output { DISPMANX_DISPLAY_HANDLE_T display; DISPMANX_UPDATE_HANDLE_T update; - struct weston_matrix matrix; /* all Elements currently on screen */ struct wl_list view_list; /* struct rpir_surface::link */ @@ -678,7 +677,6 @@ rpir_view_compute_rects(struct rpir_view *view, VC_IMAGE_TRANSFORM_T *flipmask) { struct weston_output *output_base = view->view->surface->output; - struct rpir_output *output = to_rpir_output(output_base); struct weston_matrix matrix = view->view->transform.matrix; VC_IMAGE_TRANSFORM_T flipt = 0; int src_x, src_y; @@ -712,14 +710,14 @@ rpir_view_compute_rects(struct rpir_view *view, src_height = view->surface->front->height << 16; } - weston_matrix_multiply(&matrix, &output->matrix); + weston_matrix_multiply(&matrix, &output_base->matrix); #ifdef SURFACE_TRANSFORM if (matrix.type >= WESTON_MATRIX_TRANSFORM_OTHER) { #else if (matrix.type >= WESTON_MATRIX_TRANSFORM_ROTATE) { #endif - warn_bad_matrix(&matrix, &output->matrix, + warn_bad_matrix(&matrix, &output_base->matrix, &view->view->transform.matrix); } else { if (matrix.type & WESTON_MATRIX_TRANSFORM_ROTATE) { @@ -730,7 +728,7 @@ rpir_view_compute_rects(struct rpir_view *view, fabsf(matrix.d[4]) < 1e-4) { /* no transpose */ } else { - warn_bad_matrix(&matrix, &output->matrix, + warn_bad_matrix(&matrix, &output_base->matrix, &view->view->transform.matrix); } } @@ -1324,64 +1322,6 @@ rpir_output_dmx_remove_all(struct rpir_output *output, } } -static void -output_compute_matrix(struct weston_output *base) -{ - struct rpir_output *output = to_rpir_output(base); - struct weston_matrix *matrix = &output->matrix; -#ifdef SURFACE_TRANSFORM - const float half_w = 0.5f * base->width; - const float half_h = 0.5f * base->height; -#endif - float mag; - - weston_matrix_init(matrix); - weston_matrix_translate(matrix, -base->x, -base->y, 0.0f); - -#ifdef SURFACE_TRANSFORM - weston_matrix_translate(matrix, -half_w, -half_h, 0.0f); - switch (base->transform) { - case WL_OUTPUT_TRANSFORM_FLIPPED: - weston_matrix_scale(matrix, -1.0f, 1.0f, 1.0f); - case WL_OUTPUT_TRANSFORM_NORMAL: - /* weston_matrix_rotate_xy(matrix, 1.0f, 0.0f); no-op */ - weston_matrix_translate(matrix, half_w, half_h, 0.0f); - break; - - case WL_OUTPUT_TRANSFORM_FLIPPED_90: - weston_matrix_scale(matrix, -1.0f, 1.0f, 1.0f); - case WL_OUTPUT_TRANSFORM_90: - weston_matrix_rotate_xy(matrix, 0.0f, 1.0f); - weston_matrix_translate(matrix, half_h, half_w, 0.0f); - break; - - case WL_OUTPUT_TRANSFORM_FLIPPED_180: - weston_matrix_scale(matrix, -1.0f, 1.0f, 1.0f); - case WL_OUTPUT_TRANSFORM_180: - weston_matrix_rotate_xy(matrix, -1.0f, 0.0f); - weston_matrix_translate(matrix, half_w, half_h, 0.0f); - break; - - case WL_OUTPUT_TRANSFORM_FLIPPED_270: - weston_matrix_scale(matrix, -1.0f, 1.0f, 1.0f); - case WL_OUTPUT_TRANSFORM_270: - weston_matrix_rotate_xy(matrix, 0.0f, -1.0f); - weston_matrix_translate(matrix, half_h, half_w, 0.0f); - break; - - default: - break; - } -#endif - - if (base->zoom.active) { - mag = 1.0f / (1.0f - base->zoom.spring_z.current); - weston_matrix_translate(matrix, base->zoom.trans_x, - base->zoom.trans_y, 0.0f); - weston_matrix_scale(matrix, mag, mag, 1.0f); - } -} - /* Note: this won't work right for multiple outputs. A DispmanX Element * is tied to one DispmanX Display, i.e. output. */ @@ -1398,8 +1338,6 @@ rpi_renderer_repaint_output(struct weston_output *base, assert(output->update != DISPMANX_NO_HANDLE); - output_compute_matrix(base); - rpi_resource_release(&output->capture_buffer); free(output->capture_data); output->capture_data = NULL; |