add FreeTexImageData hook to help single-copy texturing in drivers
[mesa.git] / src / mesa / main / clip.c
index 700d271f7bda9b3cbd391cdf1574390c9a5d56e1..a1eda32ebf73230e949b4318def61d7bfe2efd37 100644 (file)
@@ -1,8 +1,7 @@
-/* $Id: clip.c,v 1.24 2001/12/18 04:06:44 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
- * Version:  3.5
+ * Version:  5.1
  *
  * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
  *
  */
 
 
-#ifdef PC_HEADER
-#include "all.h"
-#else
 #include "glheader.h"
 #include "clip.h"
 #include "context.h"
 #include "macros.h"
-#include "mmath.h"
 #include "mtypes.h"
 
 #include "math/m_xform.h"
 #include "math/m_matrix.h"
-#endif
 
 
 
@@ -47,7 +41,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_ClipPlane( GLenum plane, const GLdouble *eq )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -90,9 +84,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],
@@ -104,7 +98,7 @@ _mesa_ClipPlane( GLenum plane, const GLdouble *eq )
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetClipPlane( GLenum plane, GLdouble *equation )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -122,3 +116,46 @@ _mesa_GetClipPlane( GLenum plane, GLdouble *equation )
    equation[2] = (GLdouble) ctx->Transform.EyeUserPlane[p][2];
    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);
+}
+