Add a set of predicate functions for testing matrices instead of directly
[mesa.git] / src / mesa / main / clip.c
index a061980af424a2add0106299706850b436b17750..43ef55ee3b542c7a9b32c3b7c5015bbbf82b3696 100644 (file)
@@ -1,9 +1,8 @@
-
 /*
  * Mesa 3-D graphics library
- * Version:  5.1
+ * Version:  6.3
  *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2005  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"),
@@ -41,7 +40,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_ClipPlane( GLenum plane, const GLdouble *eq )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -68,7 +67,7 @@ _mesa_ClipPlane( GLenum plane, const GLdouble *eq )
     * clipping now takes place.  The clip-space equations are recalculated
     * whenever the projection matrix changes.
     */
-   if (ctx->ModelviewMatrixStack.Top->flags & MAT_DIRTY)
+   if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top))
       _math_matrix_analyse( ctx->ModelviewMatrixStack.Top );
 
    _mesa_transform_vector( equation, equation,
@@ -85,7 +84,7 @@ _mesa_ClipPlane( GLenum plane, const GLdouble *eq )
     * code in _mesa_update_state().
     */
    if (ctx->Transform.ClipPlanesEnabled & (1 << p)) {
-      if (ctx->ProjectionMatrixStack.Top->flags & MAT_DIRTY)
+      if (_math_matrix_is_dirty(ctx->ProjectionMatrixStack.Top))
          _math_matrix_analyse( ctx->ProjectionMatrixStack.Top );
 
       _mesa_transform_vector( ctx->Transform._ClipUserPlane[p],
@@ -98,7 +97,7 @@ _mesa_ClipPlane( GLenum plane, const GLdouble *eq )
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetClipPlane( GLenum plane, GLdouble *equation )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -117,3 +116,45 @@ _mesa_GetClipPlane( GLenum plane, GLdouble *equation )
    equation[3] = (GLdouble) ctx->Transform.EyeUserPlane[p][3];
 }
 
+void GLAPIENTRY 
+_mesa_CullParameterfvEXT (GLenum cap, GLfloat *v)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+   switch (cap) {
+   case GL_CULL_VERTEX_EYE_POSITION_EXT:
+      FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
+      COPY_4FV(ctx->Transform.CullEyePos, v);
+      
+      _mesa_transform_vector( ctx->Transform.CullObjPos, 
+                             ctx->Transform.CullEyePos,
+                             ctx->ModelviewMatrixStack.Top->inv );
+      break;
+
+   case GL_CULL_VERTEX_OBJECT_POSITION_EXT:
+      FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
+      COPY_4FV(ctx->Transform.CullObjPos, v);
+
+      _mesa_transform_vector( ctx->Transform.CullEyePos, 
+                             ctx->Transform.CullObjPos,
+                             ctx->ModelviewMatrixStack.Top->m );
+     break;
+   default:
+      _mesa_error( ctx, GL_INVALID_ENUM, "glCullParameterfvEXT" );
+   }
+}
+
+void GLAPIENTRY 
+_mesa_CullParameterdvEXT (GLenum cap, GLdouble *v)
+{
+   GLfloat f[4];
+   
+   f[0] = (GLfloat)v[0];
+   f[1] = (GLfloat)v[1];
+   f[2] = (GLfloat)v[2];
+   f[3] = (GLfloat)v[3];
+
+   _mesa_CullParameterfvEXT(cap, f);
+}
+