mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
mesa: consolidate clip plane update code
This commit is contained in:
parent
957552fce0
commit
ec4a21b0e2
3 changed files with 21 additions and 25 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue