X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fclip.c;h=96c80e6ef8dd1a8f1c6e120156bddb856210548c;hb=727b2d747e13fed78bf62cfbf4a31427eed0ef29;hp=700d271f7bda9b3cbd391cdf1574390c9a5d56e1;hpb=30f51ae067379c2b3573c06b707d25a9704df7be;p=mesa.git diff --git a/src/mesa/main/clip.c b/src/mesa/main/clip.c index 700d271f7bd..96c80e6ef8d 100644 --- a/src/mesa/main/clip.c +++ b/src/mesa/main/clip.c @@ -1,10 +1,8 @@ -/* $Id: clip.c,v 1.24 2001/12/18 04:06:44 brianp Exp $ */ - /* * Mesa 3-D graphics library - * Version: 3.5 + * 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"), @@ -25,19 +23,13 @@ */ -#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 +39,7 @@ -void +void GLAPIENTRY _mesa_ClipPlane( GLenum plane, const GLdouble *eq ) { GET_CURRENT_CONTEXT(ctx); @@ -74,7 +66,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, @@ -90,9 +82,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->ProjectionMatrixStack.Top->flags & MAT_DIRTY) - _math_matrix_analyse( ctx->ProjectionMatrixStack.Top ); + 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], @@ -104,7 +96,7 @@ _mesa_ClipPlane( GLenum plane, const GLdouble *eq ) } -void +void GLAPIENTRY _mesa_GetClipPlane( GLenum plane, GLdouble *equation ) { GET_CURRENT_CONTEXT(ctx); @@ -122,3 +114,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); +} +