mesa: consolidate clip plane update code
authorBrian Paul <brianp@vmware.com>
Sat, 19 Mar 2011 20:17:41 +0000 (14:17 -0600)
committerBrian <brian@ubuntu10-32.(none)>
Sat, 19 Mar 2011 20:17:41 +0000 (14:17 -0600)
src/mesa/main/clip.c
src/mesa/main/clip.h
src/mesa/main/enable.c

index be8ce42..ba2028c 100644 (file)
 #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)
index 11431dc..a8e6d76 100644 (file)
 
 #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 );
 
index f247092..60255d7 100644 (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);