Ignore:
Timestamp:
May 23, 2000, 10:41:28 PM (25 years ago)
Author:
jeroen
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/opengl/mesa/matrix.c

    r2962 r3598  
    1 /* $Id: matrix.c,v 1.2 2000-03-01 18:49:31 jeroen Exp $ */
     1/* $Id: matrix.c,v 1.3 2000-05-23 20:40:40 jeroen Exp $ */
    22
    33/*
    44 * Mesa 3-D graphics library
    5  * Version:  3.1
     5 * Version:  3.3
    66 *
    77 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
     
    4444#include "all.h"
    4545#else
    46 #ifndef XFree86Server
    47 #include <math.h>
    48 #include <stdio.h>
    49 #include <stdlib.h>
    50 #include <string.h>
    51 #else
    52 #include "GL/xf86glx.h"
    53 #endif
     46#include "glheader.h"
    5447#include "types.h"
    5548#include "context.h"
     
    5851#include "matrix.h"
    5952#include "mmath.h"
     53#include "buffers.h"
     54#include "mem.h"
    6055#endif
    61 
    6256
    6357static const char *types[] = {
     
    347341   /* Do the translation part */
    348342   MAT(out,0,3) = - (MAT(in,0,3) * MAT(out,0,0) +
    349                      MAT(in,1,3) * MAT(out,0,1) +
    350                      MAT(in,2,3) * MAT(out,0,2) );
     343                     MAT(in,1,3) * MAT(out,0,1) +
     344                     MAT(in,2,3) * MAT(out,0,2) );
    351345   MAT(out,1,3) = - (MAT(in,0,3) * MAT(out,1,0) +
    352                      MAT(in,1,3) * MAT(out,1,1) +
    353                      MAT(in,2,3) * MAT(out,1,2) );
     346                     MAT(in,1,3) * MAT(out,1,1) +
     347                     MAT(in,2,3) * MAT(out,1,2) );
    354348   MAT(out,2,3) = - (MAT(in,0,3) * MAT(out,2,0) +
    355                      MAT(in,1,3) * MAT(out,2,1) +
    356                      MAT(in,2,3) * MAT(out,2,2) );
     349                     MAT(in,1,3) * MAT(out,2,1) +
     350                     MAT(in,2,3) * MAT(out,2,2) );
    357351
    358352   return GL_TRUE;
     
    373367   {
    374368      GLfloat  scale = (MAT(in,0,0) * MAT(in,0,0) +
    375                         MAT(in,0,1) * MAT(in,0,1) +
    376                         MAT(in,0,2) * MAT(in,0,2));
     369                        MAT(in,0,1) * MAT(in,0,1) +
     370                        MAT(in,0,2) * MAT(in,0,2));
    377371
    378372      if (scale == 0.0)
     
    418412      /* Do the translation part */
    419413      MAT(out,0,3) = - (MAT(in,0,3) * MAT(out,0,0) +
    420                         MAT(in,1,3) * MAT(out,0,1) +
    421                         MAT(in,2,3) * MAT(out,0,2) );
     414                        MAT(in,1,3) * MAT(out,0,1) +
     415                        MAT(in,2,3) * MAT(out,0,2) );
    422416      MAT(out,1,3) = - (MAT(in,0,3) * MAT(out,1,0) +
    423                         MAT(in,1,3) * MAT(out,1,1) +
    424                         MAT(in,2,3) * MAT(out,1,2) );
     417                        MAT(in,1,3) * MAT(out,1,1) +
     418                        MAT(in,2,3) * MAT(out,1,2) );
    425419      MAT(out,2,3) = - (MAT(in,0,3) * MAT(out,2,0) +
    426                         MAT(in,1,3) * MAT(out,2,1) +
    427                         MAT(in,2,3) * MAT(out,2,2) );
     420                        MAT(in,1,3) * MAT(out,2,1) +
     421                        MAT(in,2,3) * MAT(out,2,2) );
    428422   }
    429423   else
     
    523517   invert_matrix_3d_no_rot,
    524518   invert_matrix_perspective,
    525    invert_matrix_3d,            /* lazy! */
     519   invert_matrix_3d,            /* lazy! */
    526520   invert_matrix_2d_no_rot,
    527521   invert_matrix_3d
     
    544538      return GL_FALSE;
    545539   }
     540}
     541
     542
     543
     544void gl_matrix_transposef( GLfloat to[16], const GLfloat from[16] )
     545{
     546   to[0] = from[0];
     547   to[1] = from[4];
     548   to[2] = from[8];
     549   to[3] = from[12];
     550   to[4] = from[1];
     551   to[5] = from[5];
     552   to[6] = from[9];
     553   to[7] = from[13];
     554   to[8] = from[2];
     555   to[9] = from[6];
     556   to[10] = from[10];
     557   to[11] = from[14];
     558   to[12] = from[3];
     559   to[13] = from[7];
     560   to[14] = from[11];
     561   to[15] = from[15];
     562}
     563
     564
     565
     566void gl_matrix_transposed( GLdouble to[16], const GLdouble from[16] )
     567{
     568   to[0] = from[0];
     569   to[1] = from[4];
     570   to[2] = from[8];
     571   to[3] = from[12];
     572   to[4] = from[1];
     573   to[5] = from[5];
     574   to[6] = from[9];
     575   to[7] = from[13];
     576   to[8] = from[2];
     577   to[9] = from[6];
     578   to[10] = from[10];
     579   to[11] = from[14];
     580   to[12] = from[3];
     581   to[13] = from[7];
     582   to[14] = from[11];
     583   to[15] = from[15];
    546584}
    547585
     
    669707
    670708#define MASK_IDENTITY    ( ONE(0)  | ZERO(4)  | ZERO(8)  | ZERO(12) |\
    671                           ZERO(1)  |  ONE(5)  | ZERO(9)  | ZERO(13) |\
    672                           ZERO(2)  | ZERO(6)  |  ONE(10) | ZERO(14) |\
    673                           ZERO(3)  | ZERO(7)  | ZERO(11) |  ONE(15) )
     709                          ZERO(1)  |  ONE(5)  | ZERO(9)  | ZERO(13) |\
     710                          ZERO(2)  | ZERO(6)  |  ONE(10) | ZERO(14) |\
     711                          ZERO(3)  | ZERO(7)  | ZERO(11) |  ONE(15) )
    674712
    675713#define MASK_2D_NO_ROT   (           ZERO(4)  | ZERO(8)  |           \
    676                           ZERO(1)  |            ZERO(9)  |           \
    677                           ZERO(2)  | ZERO(6)  |  ONE(10) | ZERO(14) |\
    678                           ZERO(3)  | ZERO(7)  | ZERO(11) |  ONE(15) )
     714                          ZERO(1)  |            ZERO(9)  |           \
     715                          ZERO(2)  | ZERO(6)  |  ONE(10) | ZERO(14) |\
     716                          ZERO(3)  | ZERO(7)  | ZERO(11) |  ONE(15) )
    679717
    680718#define MASK_2D          (                      ZERO(8)  |           \
    681                                                 ZERO(9)  |           \
    682                           ZERO(2)  | ZERO(6)  |  ONE(10) | ZERO(14) |\
    683                           ZERO(3)  | ZERO(7)  | ZERO(11) |  ONE(15) )
     719                                                ZERO(9)  |           \
     720                          ZERO(2)  | ZERO(6)  |  ONE(10) | ZERO(14) |\
     721                          ZERO(3)  | ZERO(7)  | ZERO(11) |  ONE(15) )
    684722
    685723
    686724#define MASK_3D_NO_ROT   (           ZERO(4)  | ZERO(8)  |           \
    687                           ZERO(1)  |            ZERO(9)  |           \
    688                           ZERO(2)  | ZERO(6)  |                      \
    689                           ZERO(3)  | ZERO(7)  | ZERO(11) |  ONE(15) )
     725                          ZERO(1)  |            ZERO(9)  |           \
     726                          ZERO(2)  | ZERO(6)  |                      \
     727                          ZERO(3)  | ZERO(7)  | ZERO(11) |  ONE(15) )
    690728
    691729#define MASK_3D          (                                           \
    692                                                                      \
    693                                                                      \
    694                           ZERO(3)  | ZERO(7)  | ZERO(11) |  ONE(15) )
     730                                                                     \
     731                                                                     \
     732                          ZERO(3)  | ZERO(7)  | ZERO(11) |  ONE(15) )
    695733
    696734
    697735#define MASK_PERSPECTIVE (           ZERO(4)  |            ZERO(12) |\
    698                           ZERO(1)  |                       ZERO(13) |\
    699                           ZERO(2)  | ZERO(6)  |                      \
    700                           ZERO(3)  | ZERO(7)  |            ZERO(15) )
     736                          ZERO(1)  |                       ZERO(13) |\
     737                          ZERO(2)  | ZERO(6)  |                      \
     738                          ZERO(3)  | ZERO(7)  |            ZERO(15) )
    701739
    702740#define SQ(x) ((x)*(x))
     
    738776
    739777      if ((mask & MASK_NO_2D_SCALE) != MASK_NO_2D_SCALE)
    740         mat->flags = MAT_FLAG_GENERAL_SCALE;
     778        mat->flags = MAT_FLAG_GENERAL_SCALE;
    741779   }
    742780   else if ((mask & MASK_2D) == MASK_2D)
     
    750788      /* Check for scale */
    751789      if (SQ(mm-1) > SQ(1e-6) ||
    752           SQ(m4m4-1) > SQ(1e-6))
    753         mat->flags |= MAT_FLAG_GENERAL_SCALE;
     790          SQ(m4m4-1) > SQ(1e-6))
     791        mat->flags |= MAT_FLAG_GENERAL_SCALE;
    754792
    755793      /* Check for rotation */
    756794      if (SQ(mm4) > SQ(1e-6))
    757         mat->flags |= MAT_FLAG_GENERAL_3D;
     795        mat->flags |= MAT_FLAG_GENERAL_3D;
    758796      else
    759         mat->flags |= MAT_FLAG_ROTATION;
     797        mat->flags |= MAT_FLAG_ROTATION;
    760798
    761799   }
     
    766804      /* Check for scale */
    767805      if (SQ(m[0]-m[5]) < SQ(1e-6) &&
    768           SQ(m[0]-m[10]) < SQ(1e-6)) {
    769         if (SQ(m[0]-1.0) > SQ(1e-6))
    770             mat->flags |= MAT_FLAG_UNIFORM_SCALE;
     806          SQ(m[0]-m[10]) < SQ(1e-6)) {
     807        if (SQ(m[0]-1.0) > SQ(1e-6))
     808            mat->flags |= MAT_FLAG_UNIFORM_SCALE;
    771809      } else
    772         mat->flags |= MAT_FLAG_GENERAL_SCALE;
     810        mat->flags |= MAT_FLAG_GENERAL_SCALE;
    773811   }
    774812   else if ((mask & MASK_3D) == MASK_3D)
     
    784822      /* Check for scale */
    785823      if (SQ(c1-c2) < SQ(1e-6) && SQ(c1-c3) < SQ(1e-6)) {
    786         if (SQ(c1-1.0) > SQ(1e-6))
    787             mat->flags |= MAT_FLAG_UNIFORM_SCALE;
    788         /* else no scale at all */
     824        if (SQ(c1-1.0) > SQ(1e-6))
     825            mat->flags |= MAT_FLAG_UNIFORM_SCALE;
     826        /* else no scale at all */
    789827      } else
    790         mat->flags |= MAT_FLAG_GENERAL_SCALE;
     828        mat->flags |= MAT_FLAG_GENERAL_SCALE;
    791829
    792830      /* Check for rotation */
    793831      if (SQ(d1) < SQ(1e-6)) {
    794         CROSS3( cp, m, m+4 );
    795         SUB_3V( cp, cp, (m+8) );
    796         if (LEN_SQUARED_3FV(cp) < SQ(1e-6))
    797             mat->flags |= MAT_FLAG_ROTATION;
    798         else
    799             mat->flags |= MAT_FLAG_GENERAL_3D;
     832        CROSS3( cp, m, m+4 );
     833        SUB_3V( cp, cp, (m+8) );
     834        if (LEN_SQUARED_3FV(cp) < SQ(1e-6))
     835            mat->flags |= MAT_FLAG_ROTATION;
     836        else
     837            mat->flags |= MAT_FLAG_GENERAL_3D;
    800838      }
    801839      else
    802         mat->flags |= MAT_FLAG_GENERAL_3D; /* shear, etc */
     840        mat->flags |= MAT_FLAG_GENERAL_3D; /* shear, etc */
    803841   }
    804842   else if ((mask & MASK_PERSPECTIVE) == MASK_PERSPECTIVE && m[11]==-1.0F)
     
    825863   }
    826864   else if (TEST_MAT_FLAGS(mat, (MAT_FLAG_TRANSLATION |
    827                                 MAT_FLAG_UNIFORM_SCALE |
    828                                 MAT_FLAG_GENERAL_SCALE)))
     865                                MAT_FLAG_UNIFORM_SCALE |
     866                                MAT_FLAG_GENERAL_SCALE)))
    829867   {
    830868      if ( m[10]==1.0F && m[14]==0.0F ) {
    831         mat->type = MATRIX_2D_NO_ROT;
     869        mat->type = MATRIX_2D_NO_ROT;
    832870      }
    833871      else {
    834         mat->type = MATRIX_3D_NO_ROT;
     872        mat->type = MATRIX_3D_NO_ROT;
    835873      }
    836874   }
     
    840878            && m[2]==0.0F && m[6]==0.0F && m[10]==1.0F && m[14]==0.0F)
    841879      {
    842         mat->type = MATRIX_2D;
     880        mat->type = MATRIX_2D;
    843881      }
    844882      else
    845883      {
    846         mat->type = MATRIX_3D;
     884        mat->type = MATRIX_3D;
    847885      }
    848886   }
     
    865903   if (mat->flags & MAT_DIRTY_TYPE) {
    866904      if (mat->flags & MAT_DIRTY_FLAGS)
    867         analyze_from_scratch( mat );
     905        analyze_from_scratch( mat );
    868906      else
    869         analyze_from_flags( mat );
     907        analyze_from_flags( mat );
    870908   }
    871909
     
    875913
    876914   mat->flags &= ~(MAT_DIRTY_FLAGS|
    877                    MAT_DIRTY_TYPE|
    878                    MAT_DIRTY_INVERSE);
    879 }
    880 
    881 
    882 #define GET_ACTIVE_MATRIX(ctx, mat, flags, where)                       \
    883 do {                                                                    \
     915                   MAT_DIRTY_TYPE|
     916                   MAT_DIRTY_INVERSE);
     917}
     918
     919
     920#define GET_ACTIVE_MATRIX(ctx, mat, flags, where)                       \
     921do {                                                                    \
    884922   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, where);                      \
    885923   if (MESA_VERBOSE&VERBOSE_API) fprintf(stderr, "%s\n", where);        \
    886    switch (ctx->Transform.MatrixMode) {                                 \
    887       case GL_MODELVIEW:                                                \
    888          mat = &ctx->ModelView;                                         \
    889          flags |= NEW_MODELVIEW;                                        \
    890          break;                                                         \
    891       case GL_PROJECTION:                                               \
    892          mat = &ctx->ProjectionMatrix;                                  \
    893          flags |= NEW_PROJECTION;                                       \
    894          break;                                                         \
    895       case GL_TEXTURE:                                                  \
    896          mat = &ctx->TextureMatrix[ctx->Texture.CurrentTransformUnit];  \
    897          flags |= NEW_TEXTURE_MATRIX;                                   \
    898          break;                                                         \
    899       default:                                                          \
    900          gl_problem(ctx, where);                                        \
    901    }                                                                    \
     924   switch (ctx->Transform.MatrixMode) {                                 \
     925      case GL_MODELVIEW:                                                \
     926         mat = &ctx->ModelView;                                         \
     927         flags |= NEW_MODELVIEW;                                        \
     928         break;                                                         \
     929      case GL_PROJECTION:                                               \
     930         mat = &ctx->ProjectionMatrix;                                  \
     931         flags |= NEW_PROJECTION;                                       \
     932         break;                                                         \
     933      case GL_TEXTURE:                                                  \
     934         mat = &ctx->TextureMatrix[ctx->Texture.CurrentTransformUnit];  \
     935         flags |= NEW_TEXTURE_MATRIX;                                   \
     936         break;                                                         \
     937      default:                                                          \
     938         gl_problem(ctx, where);                                        \
     939   }                                                                    \
    902940} while (0)
    903941
    904942
    905 void gl_Frustum( GLcontext *ctx,
    906                  GLdouble left, GLdouble right,
    907                  GLdouble bottom, GLdouble top,
    908                  GLdouble nearval, GLdouble farval )
    909 {
     943void
     944_mesa_Frustum( GLdouble left, GLdouble right,
     945               GLdouble bottom, GLdouble top,
     946               GLdouble nearval, GLdouble farval )
     947{
     948   GET_CURRENT_CONTEXT(ctx);
    910949   GLfloat x, y, a, b, c, d;
    911950   GLfloat m[16];
     
    947986
    948987      if (ctx->Driver.NearFar) {
    949         (*ctx->Driver.NearFar)( ctx, nearval, farval );
     988        (*ctx->Driver.NearFar)( ctx, nearval, farval );
    950989      }
    951990   }
     
    953992
    954993
    955 void gl_Ortho( GLcontext *ctx,
    956                GLdouble left, GLdouble right,
    957                GLdouble bottom, GLdouble top,
    958                GLdouble nearval, GLdouble farval )
    959 {
     994void
     995_mesa_Ortho( GLdouble left, GLdouble right,
     996             GLdouble bottom, GLdouble top,
     997             GLdouble nearval, GLdouble farval )
     998{
     999   GET_CURRENT_CONTEXT(ctx);
    9601000   GLfloat x, y, z;
    9611001   GLfloat tx, ty, tz;
     
    9921032
    9931033
    994 void gl_MatrixMode( GLcontext *ctx, GLenum mode )
    995 {
     1034void
     1035_mesa_MatrixMode( GLenum mode )
     1036{
     1037   GET_CURRENT_CONTEXT(ctx);
    9961038   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glMatrixMode");
    9971039   switch (mode) {
     
    10081050
    10091051
    1010 void gl_PushMatrix( GLcontext *ctx )
    1011 {
     1052void
     1053_mesa_PushMatrix( void )
     1054{
     1055   GET_CURRENT_CONTEXT(ctx);
    10121056   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glPushMatrix");
    10131057
    10141058   if (MESA_VERBOSE&VERBOSE_API)
    10151059      fprintf(stderr, "glPushMatrix %s\n",
    1016               gl_lookup_enum_by_nr(ctx->Transform.MatrixMode));
     1060              gl_lookup_enum_by_nr(ctx->Transform.MatrixMode));
    10171061
    10181062   switch (ctx->Transform.MatrixMode) {
    10191063      case GL_MODELVIEW:
    1020          if (ctx->ModelViewStackDepth>=MAX_MODELVIEW_STACK_DEPTH-1) {
     1064         if (ctx->ModelViewStackDepth >= MAX_MODELVIEW_STACK_DEPTH - 1) {
    10211065            gl_error( ctx,  GL_STACK_OVERFLOW, "glPushMatrix");
    10221066            return;
    10231067         }
    10241068         gl_matrix_copy( &ctx->ModelViewStack[ctx->ModelViewStackDepth++],
    1025                         &ctx->ModelView );
     1069                        &ctx->ModelView );
    10261070         break;
    10271071      case GL_PROJECTION:
    1028          if (ctx->ProjectionStackDepth>=MAX_PROJECTION_STACK_DEPTH) {
     1072         if (ctx->ProjectionStackDepth >= MAX_PROJECTION_STACK_DEPTH - 1) {
    10291073            gl_error( ctx,  GL_STACK_OVERFLOW, "glPushMatrix");
    10301074            return;
    10311075         }
    10321076         gl_matrix_copy( &ctx->ProjectionStack[ctx->ProjectionStackDepth++],
    1033                         &ctx->ProjectionMatrix );
     1077                        &ctx->ProjectionMatrix );
    10341078
    10351079         /* Save near and far projection values */
     
    10421086         {
    10431087            GLuint t = ctx->Texture.CurrentTransformUnit;
    1044             if (ctx->TextureStackDepth[t] >= MAX_TEXTURE_STACK_DEPTH) {
     1088            if (ctx->TextureStackDepth[t] >= MAX_TEXTURE_STACK_DEPTH - 1) {
    10451089               gl_error( ctx,  GL_STACK_OVERFLOW, "glPushMatrix");
    10461090               return;
    10471091            }
    1048             gl_matrix_copy( &ctx->TextureStack[t][ctx->TextureStackDepth[t]++],
    1049                             &ctx->TextureMatrix[t] );
     1092            gl_matrix_copy( &ctx->TextureStack[t][ctx->TextureStackDepth[t]++],
     1093                            &ctx->TextureMatrix[t] );
    10501094         }
    10511095         break;
     
    10571101
    10581102
    1059 void gl_PopMatrix( GLcontext *ctx )
    1060 {
     1103void
     1104_mesa_PopMatrix( void )
     1105{
     1106   GET_CURRENT_CONTEXT(ctx);
    10611107   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glPopMatrix");
    10621108
    10631109   if (MESA_VERBOSE&VERBOSE_API)
    10641110      fprintf(stderr, "glPopMatrix %s\n",
    1065               gl_lookup_enum_by_nr(ctx->Transform.MatrixMode));
     1111              gl_lookup_enum_by_nr(ctx->Transform.MatrixMode));
    10661112
    10671113   switch (ctx->Transform.MatrixMode) {
     
    10721118         }
    10731119         gl_matrix_copy( &ctx->ModelView,
    1074                         &ctx->ModelViewStack[--ctx->ModelViewStackDepth] );
    1075         ctx->NewState |= NEW_MODELVIEW;
     1120                        &ctx->ModelViewStack[--ctx->ModelViewStackDepth] );
     1121        ctx->NewState |= NEW_MODELVIEW;
    10761122         break;
    10771123      case GL_PROJECTION:
     
    10821128
    10831129         gl_matrix_copy( &ctx->ProjectionMatrix,
    1084                         &ctx->ProjectionStack[--ctx->ProjectionStackDepth] );
    1085         ctx->NewState |= NEW_PROJECTION;
     1130                        &ctx->ProjectionStack[--ctx->ProjectionStackDepth] );
     1131        ctx->NewState |= NEW_PROJECTION;
    10861132
    10871133         /* Device driver near/far values */
     
    11011147               return;
    11021148            }
    1103             gl_matrix_copy(&ctx->TextureMatrix[t],
    1104                            &ctx->TextureStack[t][--ctx->TextureStackDepth[t]]);
     1149            gl_matrix_copy(&ctx->TextureMatrix[t],
     1150                           &ctx->TextureStack[t][--ctx->TextureStackDepth[t]]);
    11051151         }
    11061152         break;
     
    11121158
    11131159
    1114 void gl_LoadIdentity( GLcontext *ctx )
    1115 {
     1160void
     1161_mesa_LoadIdentity( void )
     1162{
     1163   GET_CURRENT_CONTEXT(ctx);
    11161164   GLmatrix *mat = 0;
    11171165   GET_ACTIVE_MATRIX(ctx, mat, ctx->NewState, "glLoadIdentity");
     
    11281176    * shortcircuit anyway...
    11291177    */
    1130    mat->flags = MAT_DIRTY_DEPENDENTS;   
    1131 }
    1132 
    1133 
    1134 void gl_LoadMatrixf( GLcontext *ctx, const GLfloat *m )
    1135 {
     1178   mat->flags = MAT_DIRTY_DEPENDENTS;
     1179}
     1180
     1181
     1182void
     1183_mesa_LoadMatrixf( const GLfloat *m )
     1184{
     1185   GET_CURRENT_CONTEXT(ctx);
    11361186   GLmatrix *mat = 0;
    11371187   GET_ACTIVE_MATRIX(ctx, mat, ctx->NewState, "glLoadMatrix");
     
    11571207
    11581208      if (ctx->Driver.NearFar) {
    1159         (*ctx->Driver.NearFar)( ctx, n, f );
     1209        (*ctx->Driver.NearFar)( ctx, n, f );
    11601210      }
    11611211   }
     1212}
     1213
     1214
     1215void
     1216_mesa_LoadMatrixd( const GLdouble *m )
     1217{
     1218   GLfloat f[16];
     1219   GLint i;
     1220   for (i = 0; i < 16; i++)
     1221      f[i] = m[i];
     1222   _mesa_LoadMatrixf(f);
    11621223}
    11631224
     
    11671228 * Multiply the active matrix by an arbitary matrix.
    11681229 */
    1169 void gl_MultMatrixf( GLcontext *ctx, const GLfloat *m )
    1170 {
     1230void
     1231_mesa_MultMatrixf( const GLfloat *m )
     1232{
     1233   GET_CURRENT_CONTEXT(ctx);
    11711234   GLmatrix *mat = 0;
    11721235   GET_ACTIVE_MATRIX( ctx,  mat, ctx->NewState, "glMultMatrix" );
     
    11791242 * Multiply the active matrix by an arbitary matrix.
    11801243 */
    1181 void gl_MultMatrixd( GLcontext *ctx, const GLdouble *m )
    1182 {
     1244void
     1245_mesa_MultMatrixd( const GLdouble *m )
     1246{
     1247   GET_CURRENT_CONTEXT(ctx);
    11831248   GLmatrix *mat = 0;
    11841249   GET_ACTIVE_MATRIX( ctx,  mat, ctx->NewState, "glMultMatrix" );
     
    11961261{
    11971262   mat->flags |= (flags |
    1198                   MAT_DIRTY_TYPE |
    1199                   MAT_DIRTY_INVERSE |
    1200                   MAT_DIRTY_DEPENDENTS);
     1263                  MAT_DIRTY_TYPE |
     1264                  MAT_DIRTY_INVERSE |
     1265                  MAT_DIRTY_DEPENDENTS);
    12011266
    12021267   if (TEST_MAT_FLAGS(mat, MAT_FLAGS_3D))
     
    12131278{
    12141279   mat->flags |= (m->flags |
    1215                   MAT_DIRTY_TYPE |
    1216                   MAT_DIRTY_INVERSE |
    1217                   MAT_DIRTY_DEPENDENTS);
     1280                  MAT_DIRTY_TYPE |
     1281                  MAT_DIRTY_INVERSE |
     1282                  MAT_DIRTY_DEPENDENTS);
    12181283
    12191284   if (TEST_MAT_FLAGS(mat, MAT_FLAGS_3D))
     
    12281293 * Execute a glRotate call
    12291294 */
    1230 void gl_Rotatef( GLcontext *ctx,
    1231                  GLfloat angle, GLfloat x, GLfloat y, GLfloat z )
    1232 {
     1295void
     1296_mesa_Rotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z )
     1297{
     1298   GET_CURRENT_CONTEXT(ctx);
    12331299   GLfloat m[16];
    12341300   if (angle != 0.0F) {
     
    12411307}
    12421308
     1309void
     1310_mesa_Rotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z )
     1311{
     1312   _mesa_Rotatef(angle, x, y, z);
     1313}
     1314
     1315
    12431316/*
    12441317 * Execute a glScale call
    12451318 */
    1246 void gl_Scalef( GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z )
    1247 {
     1319void
     1320_mesa_Scalef( GLfloat x, GLfloat y, GLfloat z )
     1321{
     1322   GET_CURRENT_CONTEXT(ctx);
    12481323   GLmatrix *mat = 0;
    12491324   GLfloat *m;
     
    12621337
    12631338   mat->flags |= (MAT_DIRTY_TYPE |
    1264                   MAT_DIRTY_INVERSE |
    1265                   MAT_DIRTY_DEPENDENTS);
    1266 }
     1339                  MAT_DIRTY_INVERSE |
     1340                  MAT_DIRTY_DEPENDENTS);
     1341}
     1342
     1343
     1344void
     1345_mesa_Scaled( GLdouble x, GLdouble y, GLdouble z )
     1346{
     1347   _mesa_Scalef(x, y, z);
     1348}
     1349
    12671350
    12681351/*
    12691352 * Execute a glTranslate call
    12701353 */
    1271 void gl_Translatef( GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z )
    1272 {
     1354void
     1355_mesa_Translatef( GLfloat x, GLfloat y, GLfloat z )
     1356{
     1357   GET_CURRENT_CONTEXT(ctx);
    12731358   GLmatrix *mat = 0;
    12741359   GLfloat *m;
     
    12811366
    12821367   mat->flags |= (MAT_FLAG_TRANSLATION |
    1283                   MAT_DIRTY_TYPE |
    1284                   MAT_DIRTY_INVERSE |
    1285                   MAT_DIRTY_DEPENDENTS);
    1286 }
     1368                  MAT_DIRTY_TYPE |
     1369                  MAT_DIRTY_INVERSE |
     1370                  MAT_DIRTY_DEPENDENTS);
     1371}
     1372
     1373
     1374void
     1375_mesa_Translated( GLdouble x, GLdouble y, GLdouble z )
     1376{
     1377   _mesa_Translatef(x, y, z);
     1378}
     1379
     1380
     1381
     1382void
     1383_mesa_LoadTransposeMatrixfARB( const GLfloat *m )
     1384{
     1385   GLfloat tm[16];
     1386   gl_matrix_transposef(tm, m);
     1387   _mesa_LoadMatrixf(tm);
     1388}
     1389
     1390
     1391void
     1392_mesa_LoadTransposeMatrixdARB( const GLdouble *m )
     1393{
     1394   GLdouble tm[16];
     1395   gl_matrix_transposed(tm, m);
     1396   _mesa_LoadMatrixd(tm);
     1397}
     1398
     1399
     1400void
     1401_mesa_MultTransposeMatrixfARB( const GLfloat *m )
     1402{
     1403   GLfloat tm[16];
     1404   gl_matrix_transposef(tm, m);
     1405   _mesa_MultMatrixf(tm);
     1406}
     1407
     1408
     1409void
     1410_mesa_MultTransposeMatrixdARB( const GLdouble *m )
     1411{
     1412   GLdouble tm[16];
     1413   gl_matrix_transposed(tm, m);
     1414   _mesa_MultMatrixd(tm);
     1415}
     1416
     1417
     1418/*
     1419 * Called via glViewport or display list execution.
     1420 */
     1421void
     1422_mesa_Viewport( GLint x, GLint y, GLsizei width, GLsizei height )
     1423{
     1424   GET_CURRENT_CONTEXT(ctx);
     1425   gl_Viewport(ctx, x, y, width, height);
     1426}
     1427
    12871428
    12881429
     
    12901431 * Define a new viewport and reallocate auxillary buffers if the size of
    12911432 * the window (color buffer) has changed.
    1292  */
    1293 void gl_Viewport( GLcontext *ctx,
    1294                   GLint x, GLint y, GLsizei width, GLsizei height )
     1433 *
     1434 * XXX This is directly called by device drivers, BUT this function
     1435 * may be renamed _mesa_Viewport (without ctx arg) in the future so
     1436 * use of _mesa_Viewport is encouraged.
     1437 */
     1438void
     1439gl_Viewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height )
    12951440{
    12961441   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glViewport");
     
    13191464   ctx->Viewport.WindowMap.m[MAT_SY] = (GLfloat) height / 2.0F;
    13201465   ctx->Viewport.WindowMap.m[MAT_TY] = ctx->Viewport.WindowMap.m[MAT_SY] + y;
    1321    ctx->Viewport.WindowMap.m[MAT_SZ] = 0.5 * DEPTH_SCALE;
    1322    ctx->Viewport.WindowMap.m[MAT_TZ] = 0.5 * DEPTH_SCALE;
     1466   ctx->Viewport.WindowMap.m[MAT_SZ] = 0.5 * ctx->Visual->DepthMaxF;
     1467   ctx->Viewport.WindowMap.m[MAT_TZ] = 0.5 * ctx->Visual->DepthMaxF;
    13231468
    13241469   ctx->Viewport.WindowMap.flags = MAT_FLAG_GENERAL_SCALE|MAT_FLAG_TRANSLATION;
     
    13311476    * ancillary buffers.
    13321477    */
    1333    gl_ResizeBuffersMESA(ctx);
     1478   _mesa_ResizeBuffersMESA();
    13341479
    13351480
     
    13371482
    13381483   if (   ctx->Viewport.X<0
    1339        || ctx->Viewport.X + ctx->Viewport.Width > ctx->Buffer->Width
     1484       || ctx->Viewport.X + ctx->Viewport.Width > ctx->DrawBuffer->Width
    13401485       || ctx->Viewport.Y<0
    1341        || ctx->Viewport.Y + ctx->Viewport.Height > ctx->Buffer->Height) {
     1486       || ctx->Viewport.Y + ctx->Viewport.Height > ctx->DrawBuffer->Height) {
    13421487      ctx->RasterMask |= WINCLIP_BIT;
    13431488   }
     
    13511496
    13521497
    1353 void gl_DepthRange( GLcontext *ctx, GLclampd nearval, GLclampd farval )
     1498void
     1499_mesa_DepthRange( GLclampd nearval, GLclampd farval )
    13541500{
    13551501   /*
     
    13651511    */
    13661512   GLfloat n, f;
    1367 
     1513   GET_CURRENT_CONTEXT(ctx);
    13681514   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glDepthRange");
    13691515
     
    13761522   ctx->Viewport.Near = n;
    13771523   ctx->Viewport.Far = f;
    1378    ctx->Viewport.WindowMap.m[MAT_SZ] = DEPTH_SCALE * ((f - n) / 2.0);
    1379    ctx->Viewport.WindowMap.m[MAT_TZ] = DEPTH_SCALE * ((f - n) / 2.0 + n);
     1524   ctx->Viewport.WindowMap.m[MAT_SZ] = ctx->Visual->DepthMaxF * ((f - n) / 2.0);
     1525   ctx->Viewport.WindowMap.m[MAT_TZ] = ctx->Visual->DepthMaxF * ((f - n) / 2.0 + n);
    13801526
    13811527   ctx->ModelProjectWinMatrixUptodate = GL_FALSE;
     
    13901536{
    13911537   gl_matrix_mul( &ctx->ModelProjectMatrix,
    1392                   &ctx->ProjectionMatrix,
    1393                   &ctx->ModelView );
     1538                  &ctx->ProjectionMatrix,
     1539                  &ctx->ModelView );
    13941540
    13951541   gl_matrix_analyze( &ctx->ModelProjectMatrix );
     
    14131559}
    14141560
     1561#if 0
    14151562void gl_matrix_set_identity( GLmatrix *m )
    14161563{
     
    14191566   m->flags = MAT_DIRTY_DEPENDENTS;
    14201567}
    1421 
     1568#endif
    14221569
    14231570void gl_matrix_alloc_inv( GLmatrix *m )
     
    14371584   if (to->inv != 0) {
    14381585      if (from->inv == 0) {
    1439         gl_matrix_invert( to );
     1586        gl_matrix_invert( to );
    14401587      } else {
    1441         MEMCPY(to->inv, from->inv, sizeof(GLfloat)*16);
     1588        MEMCPY(to->inv, from->inv, sizeof(GLfloat)*16);
    14421589      }
    14431590   }
     
    14471594{
    14481595   dest->flags = (a->flags |
    1449                   b->flags |
    1450                   MAT_DIRTY_TYPE |
    1451                   MAT_DIRTY_INVERSE |
    1452                   MAT_DIRTY_DEPENDENTS);
     1596                  b->flags |
     1597                  MAT_DIRTY_TYPE |
     1598                  MAT_DIRTY_INVERSE |
     1599                  MAT_DIRTY_DEPENDENTS);
    14531600
    14541601   if (TEST_MAT_FLAGS(dest, MAT_FLAGS_3D))
Note: See TracChangeset for help on using the changeset viewer.