14a49301eSmrg 24a49301eSmrg/* 34a49301eSmrg * Mesa 3-D graphics library 44a49301eSmrg * 54a49301eSmrg * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. 64a49301eSmrg * 74a49301eSmrg * Permission is hereby granted, free of charge, to any person obtaining a 84a49301eSmrg * copy of this software and associated documentation files (the "Software"), 94a49301eSmrg * to deal in the Software without restriction, including without limitation 104a49301eSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 114a49301eSmrg * and/or sell copies of the Software, and to permit persons to whom the 124a49301eSmrg * Software is furnished to do so, subject to the following conditions: 134a49301eSmrg * 144a49301eSmrg * The above copyright notice and this permission notice shall be included 154a49301eSmrg * in all copies or substantial portions of the Software. 164a49301eSmrg * 174a49301eSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 184a49301eSmrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 194a49301eSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20af69d88dSmrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 21af69d88dSmrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 22af69d88dSmrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23af69d88dSmrg * OTHER DEALINGS IN THE SOFTWARE. 244a49301eSmrg * 254a49301eSmrg * Authors: 264a49301eSmrg * Gareth Hughes 274a49301eSmrg */ 284a49301eSmrg 294a49301eSmrg#ifndef X86_XFORM_H 304a49301eSmrg#define X86_XFORM_H 314a49301eSmrg 324a49301eSmrg 334a49301eSmrg/* ============================================================= 344a49301eSmrg * Transformation function declarations: 354a49301eSmrg */ 364a49301eSmrg 374a49301eSmrg#define XFORM_ARGS GLvector4f *to_vec, \ 384a49301eSmrg const GLfloat m[16], \ 394a49301eSmrg const GLvector4f *from_vec 404a49301eSmrg 414a49301eSmrg#define DECLARE_XFORM_GROUP( pfx, sz ) \ 4201e04c3fSmrgextern void _mesa_##pfx##_transform_points##sz##_general( XFORM_ARGS ); \ 4301e04c3fSmrgextern void _mesa_##pfx##_transform_points##sz##_identity( XFORM_ARGS ); \ 4401e04c3fSmrgextern void _mesa_##pfx##_transform_points##sz##_3d_no_rot( XFORM_ARGS ); \ 4501e04c3fSmrgextern void _mesa_##pfx##_transform_points##sz##_perspective( XFORM_ARGS ); \ 4601e04c3fSmrgextern void _mesa_##pfx##_transform_points##sz##_2d( XFORM_ARGS ); \ 4701e04c3fSmrgextern void _mesa_##pfx##_transform_points##sz##_2d_no_rot( XFORM_ARGS ); \ 4801e04c3fSmrgextern void _mesa_##pfx##_transform_points##sz##_3d( XFORM_ARGS ); 494a49301eSmrg 504a49301eSmrg#define ASSIGN_XFORM_GROUP( pfx, sz ) \ 514a49301eSmrg _mesa_transform_tab[sz][MATRIX_GENERAL] = \ 524a49301eSmrg _mesa_##pfx##_transform_points##sz##_general; \ 534a49301eSmrg _mesa_transform_tab[sz][MATRIX_IDENTITY] = \ 544a49301eSmrg _mesa_##pfx##_transform_points##sz##_identity; \ 554a49301eSmrg _mesa_transform_tab[sz][MATRIX_3D_NO_ROT] = \ 564a49301eSmrg _mesa_##pfx##_transform_points##sz##_3d_no_rot; \ 574a49301eSmrg _mesa_transform_tab[sz][MATRIX_PERSPECTIVE] = \ 584a49301eSmrg _mesa_##pfx##_transform_points##sz##_perspective; \ 594a49301eSmrg _mesa_transform_tab[sz][MATRIX_2D] = \ 604a49301eSmrg _mesa_##pfx##_transform_points##sz##_2d; \ 614a49301eSmrg _mesa_transform_tab[sz][MATRIX_2D_NO_ROT] = \ 624a49301eSmrg _mesa_##pfx##_transform_points##sz##_2d_no_rot; \ 634a49301eSmrg _mesa_transform_tab[sz][MATRIX_3D] = \ 644a49301eSmrg _mesa_##pfx##_transform_points##sz##_3d; 654a49301eSmrg 664a49301eSmrg 674a49301eSmrg/* ============================================================= 684a49301eSmrg * Normal transformation function declarations: 694a49301eSmrg */ 704a49301eSmrg 714a49301eSmrg#define NORM_ARGS const GLmatrix *mat, \ 724a49301eSmrg GLfloat scale, \ 734a49301eSmrg const GLvector4f *in, \ 744a49301eSmrg const GLfloat *lengths, \ 754a49301eSmrg GLvector4f *dest 764a49301eSmrg 774a49301eSmrg#define DECLARE_NORM_GROUP( pfx ) \ 7801e04c3fSmrgextern void _mesa_##pfx##_rescale_normals( NORM_ARGS ); \ 7901e04c3fSmrgextern void _mesa_##pfx##_normalize_normals( NORM_ARGS ); \ 8001e04c3fSmrgextern void _mesa_##pfx##_transform_normals( NORM_ARGS ); \ 8101e04c3fSmrgextern void _mesa_##pfx##_transform_normals_no_rot( NORM_ARGS ); \ 8201e04c3fSmrgextern void _mesa_##pfx##_transform_rescale_normals( NORM_ARGS ); \ 8301e04c3fSmrgextern void _mesa_##pfx##_transform_rescale_normals_no_rot( NORM_ARGS ); \ 8401e04c3fSmrgextern void _mesa_##pfx##_transform_normalize_normals( NORM_ARGS ); \ 8501e04c3fSmrgextern void _mesa_##pfx##_transform_normalize_normals_no_rot( NORM_ARGS ); 864a49301eSmrg 874a49301eSmrg#define ASSIGN_NORM_GROUP( pfx ) \ 884a49301eSmrg _mesa_normal_tab[NORM_RESCALE] = \ 894a49301eSmrg _mesa_##pfx##_rescale_normals; \ 904a49301eSmrg _mesa_normal_tab[NORM_NORMALIZE] = \ 914a49301eSmrg _mesa_##pfx##_normalize_normals; \ 924a49301eSmrg _mesa_normal_tab[NORM_TRANSFORM] = \ 934a49301eSmrg _mesa_##pfx##_transform_normals; \ 944a49301eSmrg _mesa_normal_tab[NORM_TRANSFORM_NO_ROT] = \ 954a49301eSmrg _mesa_##pfx##_transform_normals_no_rot; \ 964a49301eSmrg _mesa_normal_tab[NORM_TRANSFORM | NORM_RESCALE] = \ 974a49301eSmrg _mesa_##pfx##_transform_rescale_normals; \ 984a49301eSmrg _mesa_normal_tab[NORM_TRANSFORM_NO_ROT | NORM_RESCALE] = \ 994a49301eSmrg _mesa_##pfx##_transform_rescale_normals_no_rot; \ 1004a49301eSmrg _mesa_normal_tab[NORM_TRANSFORM | NORM_NORMALIZE] = \ 1014a49301eSmrg _mesa_##pfx##_transform_normalize_normals; \ 1024a49301eSmrg _mesa_normal_tab[NORM_TRANSFORM_NO_ROT | NORM_NORMALIZE] = \ 1034a49301eSmrg _mesa_##pfx##_transform_normalize_normals_no_rot; 1044a49301eSmrg 1054a49301eSmrg 1064a49301eSmrg#endif 107