Replaced ClipEnabled[] array and _AnyClip with ClipPlanesEnabled bitmask.

This commit is contained in:
Brian Paul 2002-03-29 17:27:59 +00:00
parent 23d319fc7d
commit 103bc0f75c
10 changed files with 67 additions and 64 deletions

View file

@ -1,4 +1,4 @@
/* $Id: attrib.c,v 1.61 2002/03/28 22:42:41 brianp Exp $ */
/* $Id: attrib.c,v 1.62 2002/03/29 17:27:59 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -180,9 +180,7 @@ _mesa_PushAttrib(GLbitfield mask)
attr->AlphaTest = ctx->Color.AlphaEnabled;
attr->AutoNormal = ctx->Eval.AutoNormal;
attr->Blend = ctx->Color.BlendEnabled;
for (i=0;i<MAX_CLIP_PLANES;i++) {
attr->ClipPlane[i] = ctx->Transform.ClipEnabled[i];
}
attr->ClipPlanes = ctx->Transform.ClipPlanesEnabled;
attr->ColorMaterial = ctx->Light.ColorMaterialEnabled;
attr->Convolution1D = ctx->Pixel.Convolution1DEnabled;
attr->Convolution2D = ctx->Pixel.Convolution2DEnabled;
@ -451,9 +449,10 @@ pop_enable_group(GLcontext *ctx, const struct gl_enable_attrib *enable)
TEST_AND_UPDATE(ctx->Color.BlendEnabled, enable->Blend, GL_BLEND);
for (i=0;i<MAX_CLIP_PLANES;i++) {
if (ctx->Transform.ClipEnabled[i] != enable->ClipPlane[i])
const GLuint mask = 1 << i;
if ((ctx->Transform.ClipPlanesEnabled & mask) != (enable->ClipPlanes & mask))
_mesa_set_enable(ctx, (GLenum) (GL_CLIP_PLANE0 + i),
enable->ClipPlane[i]);
(enable->ClipPlanes & mask) ? GL_TRUE : GL_FALSE);
}
TEST_AND_UPDATE(ctx->Light.ColorMaterialEnabled, enable->ColorMaterial,
@ -1055,12 +1054,10 @@ _mesa_PopAttrib(void)
/* restore clip planes */
for (i = 0; i < MAX_CLIP_PLANES; i++) {
const GLuint mask = 1 << 1;
const GLfloat *eyePlane = xform->EyeUserPlane[i];
COPY_4V(ctx->Transform.EyeUserPlane[i], eyePlane);
if (xform->ClipEnabled[i]) {
_mesa_transform_vector( ctx->Transform._ClipUserPlane[i],
eyePlane,
ctx->ProjectionMatrixStack.Top->inv );
if (xform->ClipPlanesEnabled & mask) {
_mesa_set_enable(ctx, GL_CLIP_PLANE0 + i, GL_TRUE);
}
else {

View file

@ -1,4 +1,4 @@
/* $Id: clip.c,v 1.24 2001/12/18 04:06:44 brianp Exp $ */
/* $Id: clip.c,v 1.25 2002/03/29 17:29:12 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -90,9 +90,9 @@ _mesa_ClipPlane( GLenum plane, const GLdouble *eq )
* matrix, and is recalculated on changes to the projection matrix by
* code in _mesa_update_state().
*/
if (ctx->Transform.ClipEnabled[p]) {
if (ctx->Transform.ClipPlanesEnabled & (1 << p)) {
if (ctx->ProjectionMatrixStack.Top->flags & MAT_DIRTY)
_math_matrix_analyse( ctx->ProjectionMatrixStack.Top );
_math_matrix_analyse( ctx->ProjectionMatrixStack.Top );
_mesa_transform_vector( ctx->Transform._ClipUserPlane[p],
ctx->Transform.EyeUserPlane[p],

View file

@ -1,4 +1,4 @@
/* $Id: context.c,v 1.157 2002/03/19 16:47:04 brianp Exp $ */
/* $Id: context.c,v 1.158 2002/03/29 17:27:59 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -1182,10 +1182,9 @@ init_attrib_groups( GLcontext *ctx )
ctx->Transform.RescaleNormals = GL_FALSE;
ctx->Transform.RasterPositionUnclipped = GL_FALSE;
for (i=0;i<MAX_CLIP_PLANES;i++) {
ctx->Transform.ClipEnabled[i] = GL_FALSE;
ASSIGN_4V( ctx->Transform.EyeUserPlane[i], 0.0, 0.0, 0.0, 0.0 );
}
ctx->Transform._AnyClip = GL_FALSE;
ctx->Transform.ClipPlanesEnabled = 0;
/* Viewport group */
ctx->Viewport.X = 0;

View file

@ -1,4 +1,4 @@
/* $Id: enable.c,v 1.58 2002/03/28 22:45:45 brianp Exp $ */
/* $Id: enable.c,v 1.59 2002/03/29 17:27:59 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -207,20 +207,18 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state )
case GL_CLIP_PLANE4:
case GL_CLIP_PLANE5:
{
GLuint p = cap - GL_CLIP_PLANE0;
const GLuint p = cap - GL_CLIP_PLANE0;
if (ctx->Transform.ClipEnabled[p] == state)
if ((ctx->Transform.ClipPlanesEnabled & (1 << p)) == (state << p))
return;
FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
ctx->Transform.ClipEnabled[p] = state;
if (state) {
ctx->Transform._AnyClip++;
ctx->Transform.ClipPlanesEnabled |= (1 << p);
if (ctx->ProjectionMatrixStack.Top->flags & MAT_DIRTY) {
if (ctx->ProjectionMatrixStack.Top->flags & MAT_DIRTY)
_math_matrix_analyse( ctx->ProjectionMatrixStack.Top );
}
/* This derived state also calculated in clip.c and
* from _mesa_update_state() on changes to EyeUserPlane
@ -231,7 +229,7 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state )
ctx->ProjectionMatrixStack.Top->inv );
}
else {
ctx->Transform._AnyClip--;
ctx->Transform.ClipPlanesEnabled &= ~(1 << p);
}
}
break;
@ -930,7 +928,7 @@ _mesa_IsEnabled( GLenum cap )
case GL_CLIP_PLANE3:
case GL_CLIP_PLANE4:
case GL_CLIP_PLANE5:
return ctx->Transform.ClipEnabled[cap-GL_CLIP_PLANE0];
return (ctx->Transform.ClipPlanesEnabled >> (cap - GL_CLIP_PLANE0)) & 1;
case GL_COLOR_MATERIAL:
return ctx->Light.ColorMaterialEnabled;
case GL_CULL_FACE:

View file

@ -1,10 +1,10 @@
/* $Id: get.c,v 1.75 2001/12/18 04:06:45 brianp Exp $ */
/* $Id: get.c,v 1.76 2002/03/29 17:27:59 brianp Exp $ */
/*
* Mesa 3-D graphics library
* 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"),
@ -228,7 +228,10 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
case GL_CLIP_PLANE3:
case GL_CLIP_PLANE4:
case GL_CLIP_PLANE5:
*params = ctx->Transform.ClipEnabled[pname-GL_CLIP_PLANE0];
if (ctx->Transform.ClipPlanesEnabled & (1 << (pname - GL_CLIP_PLANE0)))
*params = GL_TRUE;
else
*params = GL_FALSE;
break;
case GL_COLOR_CLEAR_VALUE:
params[0] = ctx->Color.ClearColor[0] ? GL_TRUE : GL_FALSE;
@ -1554,7 +1557,10 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
case GL_CLIP_PLANE3:
case GL_CLIP_PLANE4:
case GL_CLIP_PLANE5:
*params = (GLdouble) ctx->Transform.ClipEnabled[pname-GL_CLIP_PLANE0];
if (ctx->Transform.ClipPlanesEnabled & (1 << (pname - GL_CLIP_PLANE0)))
*params = 1.0;
else
*params = 0.0;
break;
case GL_COLOR_CLEAR_VALUE:
params[0] = (GLdouble) CHAN_TO_FLOAT(ctx->Color.ClearColor[0]);
@ -2790,7 +2796,10 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
case GL_CLIP_PLANE3:
case GL_CLIP_PLANE4:
case GL_CLIP_PLANE5:
*params = (GLfloat) ctx->Transform.ClipEnabled[pname-GL_CLIP_PLANE0];
if (ctx->Transform.ClipPlanesEnabled & (1 << (pname - GL_CLIP_PLANE0)))
*params = 1.0;
else
*params = 0.0;
break;
case GL_COLOR_CLEAR_VALUE:
params[0] = CHAN_TO_FLOAT(ctx->Color.ClearColor[0]);
@ -3996,8 +4005,10 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
case GL_CLIP_PLANE3:
case GL_CLIP_PLANE4:
case GL_CLIP_PLANE5:
i = (GLint) (pname - GL_CLIP_PLANE0);
*params = (GLint) ctx->Transform.ClipEnabled[i];
if (ctx->Transform.ClipPlanesEnabled & (1 << (pname - GL_CLIP_PLANE0)))
*params = 1;
else
*params = 0;
break;
case GL_COLOR_CLEAR_VALUE:
params[0] = FLOAT_TO_INT( (ctx->Color.ClearColor[0]) );

View file

@ -1,4 +1,4 @@
/* $Id: mtypes.h,v 1.68 2002/03/23 16:33:53 brianp Exp $ */
/* $Id: mtypes.h,v 1.69 2002/03/29 17:27:59 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -379,7 +379,7 @@ struct gl_enable_attrib {
GLboolean AlphaTest;
GLboolean AutoNormal;
GLboolean Blend;
GLboolean ClipPlane[MAX_CLIP_PLANES];
GLuint ClipPlanes;
GLboolean ColorMaterial;
GLboolean Convolution1D;
GLboolean Convolution2D;
@ -1009,8 +1009,7 @@ struct gl_transform_attrib {
GLenum MatrixMode; /* Matrix mode */
GLfloat EyeUserPlane[MAX_CLIP_PLANES][4];
GLfloat _ClipUserPlane[MAX_CLIP_PLANES][4]; /* derived */
GLboolean ClipEnabled[MAX_CLIP_PLANES];
GLubyte _AnyClip; /* How many ClipEnabled? */
GLuint ClipPlanesEnabled; /* on/off bitmask */
GLboolean Normalize; /* Normalize all normals? */
GLboolean RescaleNormals; /* GL_EXT_rescale_normal */
GLboolean RasterPositionUnclipped; /* GL_IBM_rasterpos_clip */

View file

@ -1,4 +1,4 @@
/* $Id: rastpos.c,v 1.35 2002/02/15 16:26:08 brianp Exp $ */
/* $Id: rastpos.c,v 1.36 2002/03/29 17:27:59 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -92,7 +92,7 @@ userclip_point( GLcontext* ctx, const GLfloat v[] )
GLuint p;
for (p = 0; p < ctx->Const.MaxClipPlanes; p++) {
if (ctx->Transform.ClipEnabled[p]) {
if (ctx->Transform.ClipPlanesEnabled & (1 << p)) {
GLfloat dot = v[0] * ctx->Transform._ClipUserPlane[p][0]
+ v[1] * ctx->Transform._ClipUserPlane[p][1]
+ v[2] * ctx->Transform._ClipUserPlane[p][2]
@ -344,8 +344,7 @@ raster_pos4f(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
}
/* clip to user clipping planes */
if (ctx->Transform._AnyClip &&
userclip_point(ctx, clip) == 0) {
if (ctx->Transform.ClipPlanesEnabled && !userclip_point(ctx, clip)) {
ctx->Current.RasterPosValid = GL_FALSE;
return;
}

View file

@ -1,4 +1,4 @@
/* $Id: state.c,v 1.78 2002/03/16 18:07:39 brianp Exp $ */
/* $Id: state.c,v 1.79 2002/03/29 17:27:59 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -650,10 +650,10 @@ update_projection( GLcontext *ctx )
/* Recompute clip plane positions in clipspace. This is also done
* in _mesa_ClipPlane().
*/
if (ctx->Transform._AnyClip) {
if (ctx->Transform.ClipPlanesEnabled) {
GLuint p;
for (p = 0; p < ctx->Const.MaxClipPlanes; p++) {
if (ctx->Transform.ClipEnabled[p]) {
if (ctx->Transform.ClipPlanesEnabled & (1 << p)) {
_mesa_transform_vector( ctx->Transform._ClipUserPlane[p],
ctx->Transform.EyeUserPlane[p],
ctx->ProjectionMatrixStack.Top->inv );

View file

@ -1,4 +1,4 @@
/* $Id: t_vb_cliptmp.h,v 1.14 2001/07/13 17:26:39 brianp Exp $ */
/* $Id: t_vb_cliptmp.h,v 1.15 2002/03/29 17:27:59 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -140,11 +140,11 @@ TAG(clip_line)( GLcontext *ctx, GLuint i, GLuint j, GLubyte mask )
if (mask & CLIP_USER_BIT) {
for (p=0;p<MAX_CLIP_PLANES;p++) {
if (ctx->Transform.ClipEnabled[p]) {
GLfloat a = ctx->Transform._ClipUserPlane[p][0];
GLfloat b = ctx->Transform._ClipUserPlane[p][1];
GLfloat c = ctx->Transform._ClipUserPlane[p][2];
GLfloat d = ctx->Transform._ClipUserPlane[p][3];
if (ctx->Transform.ClipPlanesEnabled & (1 << p)) {
const GLfloat a = ctx->Transform._ClipUserPlane[p][0];
const GLfloat b = ctx->Transform._ClipUserPlane[p][1];
const GLfloat c = ctx->Transform._ClipUserPlane[p][2];
const GLfloat d = ctx->Transform._ClipUserPlane[p][3];
LINE_CLIP( CLIP_USER_BIT, a, b, c, d );
}
}
@ -188,13 +188,13 @@ TAG(clip_tri)( GLcontext *ctx, GLuint v0, GLuint v1, GLuint v2, GLubyte mask )
if (mask & CLIP_USER_BIT) {
for (p=0;p<MAX_CLIP_PLANES;p++) {
if (ctx->Transform.ClipEnabled[p]) {
GLfloat a = ctx->Transform._ClipUserPlane[p][0];
GLfloat b = ctx->Transform._ClipUserPlane[p][1];
GLfloat c = ctx->Transform._ClipUserPlane[p][2];
GLfloat d = ctx->Transform._ClipUserPlane[p][3];
POLY_CLIP( CLIP_USER_BIT, a, b, c, d );
}
if (ctx->Transform.ClipPlanesEnabled & (1 << p)) {
const GLfloat a = ctx->Transform._ClipUserPlane[p][0];
const GLfloat b = ctx->Transform._ClipUserPlane[p][1];
const GLfloat c = ctx->Transform._ClipUserPlane[p][2];
const GLfloat d = ctx->Transform._ClipUserPlane[p][3];
POLY_CLIP( CLIP_USER_BIT, a, b, c, d );
}
}
}
@ -241,11 +241,11 @@ TAG(clip_quad)( GLcontext *ctx, GLuint v0, GLuint v1, GLuint v2, GLuint v3,
if (mask & CLIP_USER_BIT) {
for (p=0;p<MAX_CLIP_PLANES;p++) {
if (ctx->Transform.ClipEnabled[p]) {
GLfloat a = ctx->Transform._ClipUserPlane[p][0];
GLfloat b = ctx->Transform._ClipUserPlane[p][1];
GLfloat c = ctx->Transform._ClipUserPlane[p][2];
GLfloat d = ctx->Transform._ClipUserPlane[p][3];
if (ctx->Transform.ClipPlanesEnabled & (1 << p)) {
const GLfloat a = ctx->Transform._ClipUserPlane[p][0];
const GLfloat b = ctx->Transform._ClipUserPlane[p][1];
const GLfloat c = ctx->Transform._ClipUserPlane[p][2];
const GLfloat d = ctx->Transform._ClipUserPlane[p][3];
POLY_CLIP( CLIP_USER_BIT, a, b, c, d );
}
}

View file

@ -1,4 +1,4 @@
/* $Id: t_vb_vertex.c,v 1.12 2002/01/22 14:35:17 brianp Exp $ */
/* $Id: t_vb_vertex.c,v 1.13 2002/03/29 17:27:59 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -79,7 +79,7 @@ static void NAME( GLcontext *ctx, \
GLuint p; \
\
for (p = 0; p < ctx->Const.MaxClipPlanes; p++) \
if (ctx->Transform.ClipEnabled[p]) { \
if (ctx->Transform.ClipPlanesEnabled & (1 << p)) { \
GLuint nr, i; \
const GLfloat a = ctx->Transform._ClipUserPlane[p][0]; \
const GLfloat b = ctx->Transform._ClipUserPlane[p][1]; \
@ -211,7 +211,7 @@ static GLboolean run_vertex_stage( GLcontext *ctx,
/* Test userclip planes. This contributes to VB->ClipMask, so
* is essentially required to be in this stage.
*/
if (ctx->Transform._AnyClip) {
if (ctx->Transform.ClipPlanesEnabled) {
usercliptab[VB->ClipPtr->size]( ctx,
VB->ClipPtr,
store->clipmask,