mesa: consolidate clip plane update code

This commit is contained in:
Brian Paul 2011-03-19 14:17:41 -06:00 committed by Brian
parent 957552fce0
commit ec4a21b0e2
3 changed files with 21 additions and 25 deletions

View file

@ -32,11 +32,20 @@
#include "math/m_matrix.h"
/**
* Update derived clip plane state.
*/
void
_mesa_update_clip_plane(struct gl_context *ctx, GLuint plane)
{
if (_math_matrix_is_dirty(ctx->ProjectionMatrixStack.Top))
_math_matrix_analyse( ctx->ProjectionMatrixStack.Top );
/**********************************************************************/
/* Get/Set User clip-planes. */
/**********************************************************************/
/* Clip-Space Plane = Eye-Space Plane * Projection Matrix */
_mesa_transform_vector(ctx->Transform._ClipUserPlane[plane],
ctx->Transform.EyeUserPlane[plane],
ctx->ProjectionMatrixStack.Top->inv);
}
void GLAPIENTRY
@ -78,17 +87,8 @@ _mesa_ClipPlane( GLenum plane, const GLdouble *eq )
FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
COPY_4FV(ctx->Transform.EyeUserPlane[p], equation);
/* Update derived state. This state also depends on the projection
* matrix, and is recalculated on changes to the projection matrix by
* code in _mesa_update_state().
*/
if (ctx->Transform.ClipPlanesEnabled & (1 << p)) {
if (_math_matrix_is_dirty(ctx->ProjectionMatrixStack.Top))
_math_matrix_analyse( ctx->ProjectionMatrixStack.Top );
_mesa_transform_vector( ctx->Transform._ClipUserPlane[p],
ctx->Transform.EyeUserPlane[p],
ctx->ProjectionMatrixStack.Top->inv );
_mesa_update_clip_plane(ctx, p);
}
if (ctx->Driver.ClipPlane)

View file

@ -33,6 +33,11 @@
#include "glheader.h"
struct gl_context;
extern void
_mesa_update_clip_plane(struct gl_context *ctx, GLuint plane);
extern void GLAPIENTRY
_mesa_ClipPlane( GLenum plane, const GLdouble *equation );

View file

@ -29,6 +29,7 @@
#include "glheader.h"
#include "clip.h"
#include "context.h"
#include "enable.h"
#include "light.h"
@ -310,17 +311,7 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
if (state) {
ctx->Transform.ClipPlanesEnabled |= (1 << p);
if (_math_matrix_is_dirty(ctx->ProjectionMatrixStack.Top))
_math_matrix_analyse( ctx->ProjectionMatrixStack.Top );
/* This derived state also calculated in clip.c and
* from _mesa_update_state() on changes to EyeUserPlane
* and ctx->ProjectionMatrix respectively.
*/
_mesa_transform_vector( ctx->Transform._ClipUserPlane[p],
ctx->Transform.EyeUserPlane[p],
ctx->ProjectionMatrixStack.Top->inv );
_mesa_update_clip_plane(ctx, p);
}
else {
ctx->Transform.ClipPlanesEnabled &= ~(1 << p);