mirror of
https://github.com/brl/mutter.git
synced 2025-02-23 16:34:10 +00:00
matrix: Add cogl_matrix_orthographic
This adds an experimental cogl_matrix_orthographic() function that is more consistent with other Cogl api by taking x_1, y_1, x_2, y_2 arguments to define the top-left and bottom-right coordinates of the orthographic coordinates instead of OpenGL style left, right, bottom and top values. Reviewed-by: Neil Roberts <neil@linux.intel.com>
This commit is contained in:
parent
ba02f70961
commit
a4f3d0d18b
@ -1420,31 +1420,31 @@ cogl_matrix_perspective (CoglMatrix *matrix,
|
|||||||
* MAT_FLAG_GENERAL_SCALE and MAT_FLAG_TRANSLATION flags.
|
* MAT_FLAG_GENERAL_SCALE and MAT_FLAG_TRANSLATION flags.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
_cogl_matrix_ortho (CoglMatrix *matrix,
|
_cogl_matrix_orthographic (CoglMatrix *matrix,
|
||||||
float left,
|
float x_1,
|
||||||
float right,
|
float y_1,
|
||||||
float bottom,
|
float x_2,
|
||||||
float top,
|
float y_2,
|
||||||
float nearval,
|
float nearval,
|
||||||
float farval)
|
float farval)
|
||||||
{
|
{
|
||||||
float m[16];
|
float m[16];
|
||||||
|
|
||||||
#define M(row,col) m[col*4+row]
|
#define M(row, col) m[col * 4 + row]
|
||||||
M (0,0) = 2.0f / (right-left);
|
M (0,0) = 2.0f / (x_2 - x_1);
|
||||||
M (0,1) = 0.0f;
|
M (0,1) = 0.0f;
|
||||||
M (0,2) = 0.0f;
|
M (0,2) = 0.0f;
|
||||||
M (0,3) = -(right+left) / (right-left);
|
M (0,3) = -(x_2 + x_1) / (x_2 - x_1);
|
||||||
|
|
||||||
M (1,0) = 0.0f;
|
M (1,0) = 0.0f;
|
||||||
M (1,1) = 2.0f / (top-bottom);
|
M (1,1) = 2.0f / (y_1 - y_2);
|
||||||
M (1,2) = 0.0f;
|
M (1,2) = 0.0f;
|
||||||
M (1,3) = -(top+bottom) / (top-bottom);
|
M (1,3) = -(y_1 + y_2) / (y_1 - y_2);
|
||||||
|
|
||||||
M (2,0) = 0.0f;
|
M (2,0) = 0.0f;
|
||||||
M (2,1) = 0.0f;
|
M (2,1) = 0.0f;
|
||||||
M (2,2) = -2.0f / (farval-nearval);
|
M (2,2) = -2.0f / (farval - nearval);
|
||||||
M (2,3) = -(farval+nearval) / (farval-nearval);
|
M (2,3) = -(farval + nearval) / (farval - nearval);
|
||||||
|
|
||||||
M (3,0) = 0.0f;
|
M (3,0) = 0.0f;
|
||||||
M (3,1) = 0.0f;
|
M (3,1) = 0.0f;
|
||||||
@ -1463,10 +1463,23 @@ cogl_matrix_ortho (CoglMatrix *matrix,
|
|||||||
float right,
|
float right,
|
||||||
float bottom,
|
float bottom,
|
||||||
float top,
|
float top,
|
||||||
float near_val,
|
float near,
|
||||||
float far_val)
|
float far)
|
||||||
{
|
{
|
||||||
_cogl_matrix_ortho (matrix, left, right, bottom, top, near_val, far_val);
|
_cogl_matrix_orthographic (matrix, left, top, right, bottom, near, far);
|
||||||
|
_COGL_MATRIX_DEBUG_PRINT (matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_matrix_orthographic (CoglMatrix *matrix,
|
||||||
|
float x_1,
|
||||||
|
float y_1,
|
||||||
|
float x_2,
|
||||||
|
float y_2,
|
||||||
|
float near,
|
||||||
|
float far)
|
||||||
|
{
|
||||||
|
_cogl_matrix_orthographic (matrix, x_1, y_1, x_2, y_2, near, far);
|
||||||
_COGL_MATRIX_DEBUG_PRINT (matrix);
|
_COGL_MATRIX_DEBUG_PRINT (matrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -294,6 +294,36 @@ cogl_matrix_perspective (CoglMatrix *matrix,
|
|||||||
float z_near,
|
float z_near,
|
||||||
float z_far);
|
float z_far);
|
||||||
|
|
||||||
|
#ifdef COGL_ENABLE_EXPERIMENTAL_API
|
||||||
|
#define cogl_matrix_orthographic cogl_matrix_orthographic_EXP
|
||||||
|
/**
|
||||||
|
* cogl_matrix_orthographic:
|
||||||
|
* @matrix: A 4x4 transformation matrix
|
||||||
|
* @x_1: The x coordinate for the first vertical clipping plane
|
||||||
|
* @y_1: The y coordinate for the first horizontal clipping plane
|
||||||
|
* @x_2: The x coordinate for the second vertical clipping plane
|
||||||
|
* @y_2: The y coordinate for the second horizontal clipping plane
|
||||||
|
* @near: The <emphasis>distance</emphasis> to the near clipping
|
||||||
|
* plane (will be <emphasis>negative</emphasis> if the plane is
|
||||||
|
* behind the viewer)
|
||||||
|
* @far: The <emphasis>distance</emphasis> to the far clipping
|
||||||
|
* plane (will be <emphasis>negative</emphasis> if the plane is
|
||||||
|
* behind the viewer)
|
||||||
|
*
|
||||||
|
* Multiplies @matrix by a parallel projection matrix.
|
||||||
|
*
|
||||||
|
* Since: 1.10
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
cogl_matrix_orthographic (CoglMatrix *matrix,
|
||||||
|
float x_1,
|
||||||
|
float y_1,
|
||||||
|
float x_2,
|
||||||
|
float y_2,
|
||||||
|
float near,
|
||||||
|
float far);
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_matrix_ortho:
|
* cogl_matrix_ortho:
|
||||||
* @matrix: A 4x4 transformation matrix
|
* @matrix: A 4x4 transformation matrix
|
||||||
@ -307,6 +337,8 @@ cogl_matrix_perspective (CoglMatrix *matrix,
|
|||||||
* the plane is behind the viewer)
|
* the plane is behind the viewer)
|
||||||
*
|
*
|
||||||
* Multiplies @matrix by a parallel projection matrix.
|
* Multiplies @matrix by a parallel projection matrix.
|
||||||
|
*
|
||||||
|
* Deprecated: 1.10: Use cogl_matrix_orthographic()
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
cogl_matrix_ortho (CoglMatrix *matrix,
|
cogl_matrix_ortho (CoglMatrix *matrix,
|
||||||
|
@ -479,7 +479,7 @@ cogl_matrix_copy
|
|||||||
cogl_matrix_equal
|
cogl_matrix_equal
|
||||||
cogl_matrix_free
|
cogl_matrix_free
|
||||||
cogl_matrix_frustum
|
cogl_matrix_frustum
|
||||||
cogl_matrix_ortho
|
cogl_matrix_orthographic
|
||||||
cogl_matrix_perspective
|
cogl_matrix_perspective
|
||||||
cogl_matrix_look_at
|
cogl_matrix_look_at
|
||||||
cogl_matrix_multiply
|
cogl_matrix_multiply
|
||||||
|
Loading…
x
Reference in New Issue
Block a user