X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fclip.c;h=43ef55ee3b542c7a9b32c3b7c5015bbbf82b3696;hb=eded7f010d344a909cf9c403eb3bdad91804d174;hp=d2bbd8b9a02b88476731f60cbe773a6bd7a1af1f;hpb=08836341788a9f9d638d9dc8328510ccd18ddeb5;p=mesa.git diff --git a/src/mesa/main/clip.c b/src/mesa/main/clip.c index d2bbd8b9a02..43ef55ee3b5 100644 --- a/src/mesa/main/clip.c +++ b/src/mesa/main/clip.c @@ -1,10 +1,8 @@ -/* $Id: clip.c,v 1.20 2001/03/03 20:33:27 brianp Exp $ */ - /* * Mesa 3-D graphics library - * Version: 3.3 + * Version: 6.3 * - * Copyright (C) 1999 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"), @@ -25,22 +23,14 @@ */ -#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 - - - @@ -50,7 +40,7 @@ -void +void GLAPIENTRY _mesa_ClipPlane( GLenum plane, const GLdouble *eq ) { GET_CURRENT_CONTEXT(ctx); @@ -59,15 +49,15 @@ _mesa_ClipPlane( GLenum plane, const GLdouble *eq ) ASSERT_OUTSIDE_BEGIN_END(ctx); p = (GLint) plane - (GLint) GL_CLIP_PLANE0; - if (p < 0 || p >= ctx->Const.MaxClipPlanes) { + if (p < 0 || p >= (GLint) ctx->Const.MaxClipPlanes) { _mesa_error( ctx, GL_INVALID_ENUM, "glClipPlane" ); return; } - equation[0] = eq[0]; - equation[1] = eq[1]; - equation[2] = eq[2]; - equation[3] = eq[3]; + equation[0] = (GLfloat) eq[0]; + equation[1] = (GLfloat) eq[1]; + equation[2] = (GLfloat) eq[2]; + equation[3] = (GLfloat) eq[3]; /* * The equation is transformed by the transpose of the inverse of the @@ -77,14 +67,15 @@ _mesa_ClipPlane( GLenum plane, const GLdouble *eq ) * clipping now takes place. The clip-space equations are recalculated * whenever the projection matrix changes. */ - if (ctx->ModelView.flags & MAT_DIRTY) - _math_matrix_analyse( &ctx->ModelView ); + if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) + _math_matrix_analyse( ctx->ModelviewMatrixStack.Top ); - _mesa_transform_vector( equation, equation, ctx->ModelView.inv ); + _mesa_transform_vector( equation, equation, + ctx->ModelviewMatrixStack.Top->inv ); if (TEST_EQ_4V(ctx->Transform.EyeUserPlane[p], equation)) return; - + FLUSH_VERTICES(ctx, _NEW_TRANSFORM); COPY_4FV(ctx->Transform.EyeUserPlane[p], equation); @@ -92,13 +83,13 @@ _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->ProjectionMatrix.flags & MAT_DIRTY) - _math_matrix_analyse( &ctx->ProjectionMatrix ); + 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->ProjectionMatrix.inv ); + ctx->ProjectionMatrixStack.Top->inv ); } if (ctx->Driver.ClipPlane) @@ -106,7 +97,7 @@ _mesa_ClipPlane( GLenum plane, const GLdouble *eq ) } -void +void GLAPIENTRY _mesa_GetClipPlane( GLenum plane, GLdouble *equation ) { GET_CURRENT_CONTEXT(ctx); @@ -114,7 +105,7 @@ _mesa_GetClipPlane( GLenum plane, GLdouble *equation ) ASSERT_OUTSIDE_BEGIN_END(ctx); p = (GLint) (plane - GL_CLIP_PLANE0); - if (p < 0 || p >= ctx->Const.MaxClipPlanes) { + if (p < 0 || p >= (GLint) ctx->Const.MaxClipPlanes) { _mesa_error( ctx, GL_INVALID_ENUM, "glGetClipPlane" ); return; } @@ -124,3 +115,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); +} +