[Cogl] [PATCH] matrix: Add a init_translation() contructor
Robert Bragg
robert at sixbynine.org
Tue May 8 04:08:26 PDT 2012
Yeah this looks good to land in master to me:
Reviewed-by: Robert Bragg <robert at linux.intel.com>
thanks,
- Robert
On Thu, May 3, 2012 at 2:15 PM, Damien Lespiau <damien.lespiau at gmail.com> wrote:
> From: Damien Lespiau <damien.lespiau at intel.com>
>
> This allows people to initialize a matrix with a translation
> transformation. The options to do it at the moment were:
>
> * init_from_array() but it give cogl no information about the type of
> matrix.
> * init_indentity() and then translate() but it means doing a lot of
> computations for no reason.
> ---
> cogl/cogl-matrix.c | 34 ++++++++++++++++++++
> cogl/cogl-matrix.h | 24 ++++++++++++++
> .../cogl-2.0-experimental-sections.txt | 1 +
> 3 files changed, 59 insertions(+), 0 deletions(-)
>
> diff --git a/cogl/cogl-matrix.c b/cogl/cogl-matrix.c
> index a346a5c..1a569c6 100644
> --- a/cogl/cogl-matrix.c
> +++ b/cogl/cogl-matrix.c
> @@ -1596,6 +1596,40 @@ cogl_matrix_init_identity (CoglMatrix *matrix)
> _COGL_MATRIX_DEBUG_PRINT (matrix);
> }
>
> +/*
> + * Set a matrix to the (tx, ty, tz) translation matrix.
> + *
> + * @matix matrix.
> + * @tx x coordinate of the translation vector
> + * @ty y coordinate of the translation vector
> + * @tz z coordinate of the translation vector
> + */
> +static void
> +_cogl_matrix_init_translation (CoglMatrix *matrix,
> + float tx,
> + float ty,
> + float tz)
> +{
> + memcpy (matrix, identity, 16 * sizeof (float));
> +
> + matrix->xw = tx;
> + matrix->yw = ty;
> + matrix->yw = tz;
> +
> + matrix->type = COGL_MATRIX_TYPE_3D;
> + matrix->flags = MAT_FLAG_TRANSLATION | MAT_DIRTY_INVERSE;
> +}
> +
> +void
> +cogl_matrix_init_translation (CoglMatrix *matrix,
> + float tx,
> + float ty,
> + float tz)
> +{
> + _cogl_matrix_init_translation (matrix, tx, ty, tz);
> + _COGL_MATRIX_DEBUG_PRINT (matrix);
> +}
> +
> #if 0
> /*
> * Test if the given matrix preserves vector lengths.
> diff --git a/cogl/cogl-matrix.h b/cogl/cogl-matrix.h
> index cca1823..b207e01 100644
> --- a/cogl/cogl-matrix.h
> +++ b/cogl/cogl-matrix.h
> @@ -127,6 +127,30 @@ void
> cogl_matrix_init_identity (CoglMatrix *matrix);
>
> /**
> + * cogl_matrix_init_translation:
> + * @matrix: A 4x4 transformation matrix
> + * @tx x coordinate of the translation vector
> + * @ty y coordinate of the translation vector
> + * @tz z coordinate of the translation vector
> + *
> + * Resets matrix to the (tx, ty, tz) translation matrix:
> + *
> + * |[
> + * .xx=1; .xy=0; .xz=0; .xw=tx;
> + * .yx=0; .yy=1; .yz=0; .yw=ty;
> + * .zx=0; .zy=0; .zz=1; .zw=tz;
> + * .wx=0; .wy=0; .wz=0; .ww=1;
> + * ]|
> + *
> + * Since: 2.0
> + */
> +void
> +cogl_matrix_init_translation (CoglMatrix *matrix,
> + float tx,
> + float ty,
> + float tz);
> +
> +/**
> * cogl_matrix_multiply:
> * @result: The address of a 4x4 matrix to store the result in
> * @a: A 4x4 transformation matrix
> diff --git a/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt b/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt
> index ca3340d..c9af2fb 100644
> --- a/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt
> +++ b/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt
> @@ -534,6 +534,7 @@ cogl_color_equal
> CoglMatrix
> cogl_matrix_init_identity
> cogl_matrix_init_from_array
> +cogl_matrix_init_translation
> cogl_matrix_copy
> cogl_matrix_equal
> cogl_matrix_free
> --
> 1.7.7.5
>
> _______________________________________________
> Cogl mailing list
> Cogl at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/cogl
More information about the Cogl
mailing list