diff options
Diffstat (limited to 'xc/extras/Mesa/src/math/m_norm_tmp.h')
-rw-r--r-- | xc/extras/Mesa/src/math/m_norm_tmp.h | 161 |
1 files changed, 91 insertions, 70 deletions
diff --git a/xc/extras/Mesa/src/math/m_norm_tmp.h b/xc/extras/Mesa/src/math/m_norm_tmp.h index d5f7da409..90ca38093 100644 --- a/xc/extras/Mesa/src/math/m_norm_tmp.h +++ b/xc/extras/Mesa/src/math/m_norm_tmp.h @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.1 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -27,25 +27,34 @@ * New (3.1) transformation code written by Keith Whitwell. */ -#include <math.h> -#include "m_vertices.h" +/* Functions to tranform a vector of normals. This includes applying + * the transformation matrix, rescaling and normalization. + */ +/* + * mat - the 4x4 transformation matrix + * scale - uniform scale factor of the transformation matrix (not always used) + * in - the source vector of normals + * lengths - length of each incoming normal (may be NULL) (a display list + * optimization) + * dest - the destination vector of normals + */ static void _XFORMAPI TAG(transform_normalize_normals)( const GLmatrix *mat, GLfloat scale, - const GLvector3f *in, + const GLvector4f *in, const GLfloat *lengths, - GLvector3f *dest ) + GLvector4f *dest ) { - GLuint i; + GLfloat (*out)[4] = (GLfloat (*)[4])dest->start; const GLfloat *from = in->start; - GLuint stride = in->stride; - GLuint count = in->count; - GLfloat (*out)[3] = (GLfloat (*)[3])dest->start; - GLfloat *m = mat->inv; + const GLuint stride = in->stride; + const GLuint count = in->count; + const GLfloat *m = mat->inv; GLfloat m0 = m[0], m4 = m[4], m8 = m[8]; GLfloat m1 = m[1], m5 = m[5], m9 = m[9]; GLfloat m2 = m[2], m6 = m[6], m10 = m[10]; + GLuint i; if (!lengths) { STRIDE_LOOP { @@ -64,8 +73,7 @@ TAG(transform_normalize_normals)( const GLmatrix *mat, out[i][1] = (GLfloat) (ty * scale); out[i][2] = (GLfloat) (tz * scale); } - else - { + else { out[i][0] = out[i][1] = out[i][2] = 0; } } @@ -101,19 +109,20 @@ TAG(transform_normalize_normals)( const GLmatrix *mat, static void _XFORMAPI TAG(transform_normalize_normals_no_rot)( const GLmatrix *mat, GLfloat scale, - const GLvector3f *in, + const GLvector4f *in, const GLfloat *lengths, - GLvector3f *dest ) + GLvector4f *dest ) { - GLuint i; + GLfloat (*out)[4] = (GLfloat (*)[4])dest->start; const GLfloat *from = in->start; - GLuint stride = in->stride; - GLuint count = in->count; - GLfloat (*out)[3] = (GLfloat (*)[3])dest->start; - GLfloat *m = mat->inv; + const GLuint stride = in->stride; + const GLuint count = in->count; + const GLfloat *m = mat->inv; GLfloat m0 = m[0]; GLfloat m5 = m[5]; GLfloat m10 = m[10]; + GLuint i; + if (!lengths) { STRIDE_LOOP { GLfloat tx, ty, tz; @@ -131,8 +140,7 @@ TAG(transform_normalize_normals_no_rot)( const GLmatrix *mat, out[i][1] = (GLfloat) (ty * scale); out[i][2] = (GLfloat) (tz * scale); } - else - { + else { out[i][0] = out[i][1] = out[i][2] = 0; } } @@ -166,20 +174,22 @@ TAG(transform_normalize_normals_no_rot)( const GLmatrix *mat, static void _XFORMAPI TAG(transform_rescale_normals_no_rot)( const GLmatrix *mat, GLfloat scale, - const GLvector3f *in, + const GLvector4f *in, const GLfloat *lengths, - GLvector3f *dest ) + GLvector4f *dest ) { - GLuint i; + GLfloat (*out)[4] = (GLfloat (*)[4])dest->start; const GLfloat *from = in->start; - GLuint stride = in->stride; - GLuint count = in->count; - GLfloat (*out)[3] = (GLfloat (*)[3])dest->start; + const GLuint stride = in->stride; + const GLuint count = in->count; const GLfloat *m = mat->inv; - GLfloat m0 = scale*m[0]; - GLfloat m5 = scale*m[5]; - GLfloat m10 = scale*m[10]; + const GLfloat m0 = scale*m[0]; + const GLfloat m5 = scale*m[5]; + const GLfloat m10 = scale*m[10]; + GLuint i; + (void) lengths; + STRIDE_LOOP { GLfloat ux = from[0], uy = from[1], uz = from[2]; out[i][0] = ux * m0; @@ -189,26 +199,29 @@ TAG(transform_rescale_normals_no_rot)( const GLmatrix *mat, dest->count = in->count; } + static void _XFORMAPI TAG(transform_rescale_normals)( const GLmatrix *mat, GLfloat scale, - const GLvector3f *in, + const GLvector4f *in, const GLfloat *lengths, - GLvector3f *dest ) + GLvector4f *dest ) { - GLuint i; + GLfloat (*out)[4] = (GLfloat (*)[4])dest->start; const GLfloat *from = in->start; - GLuint stride = in->stride; - GLuint count = in->count; - GLfloat (*out)[3] = (GLfloat (*)[3])dest->start; + const GLuint stride = in->stride; + const GLuint count = in->count; /* Since we are unlikely to have < 3 vertices in the buffer, * it makes sense to pre-multiply by scale. */ const GLfloat *m = mat->inv; - GLfloat m0 = scale*m[0], m4 = scale*m[4], m8 = scale*m[8]; - GLfloat m1 = scale*m[1], m5 = scale*m[5], m9 = scale*m[9]; - GLfloat m2 = scale*m[2], m6 = scale*m[6], m10 = scale*m[10]; + const GLfloat m0 = scale*m[0], m4 = scale*m[4], m8 = scale*m[8]; + const GLfloat m1 = scale*m[1], m5 = scale*m[5], m9 = scale*m[9]; + const GLfloat m2 = scale*m[2], m6 = scale*m[6], m10 = scale*m[10]; + GLuint i; + (void) lengths; + STRIDE_LOOP { GLfloat ux = from[0], uy = from[1], uz = from[2]; out[i][0] = ux * m0 + uy * m1 + uz * m2; @@ -222,21 +235,23 @@ TAG(transform_rescale_normals)( const GLmatrix *mat, static void _XFORMAPI TAG(transform_normals_no_rot)( const GLmatrix *mat, GLfloat scale, - const GLvector3f *in, + const GLvector4f *in, const GLfloat *lengths, - GLvector3f *dest ) + GLvector4f *dest ) { - GLuint i; + GLfloat (*out)[4] = (GLfloat (*)[4])dest->start; const GLfloat *from = in->start; - GLuint stride = in->stride; - GLuint count = in->count; - GLfloat (*out)[3] = (GLfloat (*)[3])dest->start; + const GLuint stride = in->stride; + const GLuint count = in->count; const GLfloat *m = mat->inv; - GLfloat m0 = m[0]; - GLfloat m5 = m[5]; - GLfloat m10 = m[10]; + const GLfloat m0 = m[0]; + const GLfloat m5 = m[5]; + const GLfloat m10 = m[10]; + GLuint i; + (void) scale; (void) lengths; + STRIDE_LOOP { GLfloat ux = from[0], uy = from[1], uz = from[2]; out[i][0] = ux * m0; @@ -250,21 +265,23 @@ TAG(transform_normals_no_rot)( const GLmatrix *mat, static void _XFORMAPI TAG(transform_normals)( const GLmatrix *mat, GLfloat scale, - const GLvector3f *in, + const GLvector4f *in, const GLfloat *lengths, - GLvector3f *dest ) + GLvector4f *dest ) { - GLuint i; + GLfloat (*out)[4] = (GLfloat (*)[4])dest->start; const GLfloat *from = in->start; - GLuint stride = in->stride; - GLuint count = in->count; - GLfloat (*out)[3] = (GLfloat (*)[3])dest->start; + const GLuint stride = in->stride; + const GLuint count = in->count; const GLfloat *m = mat->inv; - GLfloat m0 = m[0], m4 = m[4], m8 = m[8]; - GLfloat m1 = m[1], m5 = m[5], m9 = m[9]; - GLfloat m2 = m[2], m6 = m[6], m10 = m[10]; + const GLfloat m0 = m[0], m4 = m[4], m8 = m[8]; + const GLfloat m1 = m[1], m5 = m[5], m9 = m[9]; + const GLfloat m2 = m[2], m6 = m[6], m10 = m[10]; + GLuint i; + (void) scale; (void) lengths; + STRIDE_LOOP { GLfloat ux = from[0], uy = from[1], uz = from[2]; out[i][0] = ux * m0 + uy * m1 + uz * m2; @@ -278,17 +295,19 @@ TAG(transform_normals)( const GLmatrix *mat, static void _XFORMAPI TAG(normalize_normals)( const GLmatrix *mat, GLfloat scale, - const GLvector3f *in, + const GLvector4f *in, const GLfloat *lengths, - GLvector3f *dest ) + GLvector4f *dest ) { - GLuint i; + GLfloat (*out)[4] = (GLfloat (*)[4])dest->start; const GLfloat *from = in->start; - GLuint stride = in->stride; - GLuint count = in->count; - GLfloat (*out)[3] = (GLfloat (*)[3])dest->start; + const GLuint stride = in->stride; + const GLuint count = in->count; + GLuint i; + (void) mat; (void) scale; + if (lengths) { STRIDE_LOOP { const GLfloat x = from[0], y = from[1], z = from[2]; @@ -322,17 +341,19 @@ TAG(normalize_normals)( const GLmatrix *mat, static void _XFORMAPI TAG(rescale_normals)( const GLmatrix *mat, GLfloat scale, - const GLvector3f *in, + const GLvector4f *in, const GLfloat *lengths, - GLvector3f *dest ) + GLvector4f *dest ) { - GLuint i; + GLfloat (*out)[4] = (GLfloat (*)[4])dest->start; const GLfloat *from = in->start; - GLuint stride = in->stride; - GLuint count = in->count; - GLfloat (*out)[3] = (GLfloat (*)[3])dest->start; + const GLuint stride = in->stride; + const GLuint count = in->count; + GLuint i; + (void) mat; (void) lengths; + STRIDE_LOOP { SCALE_SCALAR_3V( out[i], scale, from ); } |