X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Ftnl%2Ft_vb_points.c;h=de866974473ec34459c9273a4d6968bbba8c5e30;hb=5a382001224df9aad6137c825fbfc2d058b220b1;hp=c60a0f56b126886b91ea4ee761c8201b40cc1254;hpb=86b842790b720cd6b1499ce8edca8a4e9c8dc029;p=mesa.git diff --git a/src/mesa/tnl/t_vb_points.c b/src/mesa/tnl/t_vb_points.c index c60a0f56b12..de866974473 100644 --- a/src/mesa/tnl/t_vb_points.c +++ b/src/mesa/tnl/t_vb_points.c @@ -1,10 +1,8 @@ -/* $Id: t_vb_points.c,v 1.5 2001/12/14 02:51:45 brianp Exp $ */ - /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 6.1 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2004 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"), @@ -24,17 +22,17 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * Authors: - * Brian Paul + * Brian Paul */ #include "mtypes.h" -#include "mem.h" +#include "imports.h" #include "t_context.h" #include "t_pipeline.h" struct point_stage_data { - GLvector1f PointSize; + GLvector4f PointSize; }; #define POINT_STAGE_DATA(stage) ((struct point_stage_data *)stage->privatePtr) @@ -44,7 +42,7 @@ struct point_stage_data { * Compute attenuated point sizes */ static GLboolean run_point_stage( GLcontext *ctx, - struct gl_pipeline_stage *stage ) + struct tnl_pipeline_stage *stage ) { struct point_stage_data *store = POINT_STAGE_DATA(stage); struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb; @@ -53,19 +51,20 @@ static GLboolean run_point_stage( GLcontext *ctx, const GLfloat p1 = ctx->Point.Params[1]; const GLfloat p2 = ctx->Point.Params[2]; const GLfloat pointSize = ctx->Point._Size; - GLfloat *size = store->PointSize.data; + GLfloat (*size)[4] = store->PointSize.data; GLuint i; if (stage->changed_inputs) { /* XXX do threshold and min/max clamping here? */ for (i = 0; i < VB->Count; i++) { const GLfloat dist = -eye[i][2]; - /* GLfloat dist = GL_SQRT(pos[0]*pos[0]+pos[1]*pos[1]+pos[2]*pos[2]);*/ - size[i] = pointSize / (p0 + dist * (p1 + dist * p2)); + /* GLfloat dist = SQRTF(pos[0]*pos[0]+pos[1]*pos[1]+pos[2]*pos[2]);*/ + size[i][0] = pointSize / (p0 + dist * (p1 + dist * p2)); } } VB->PointSizePtr = &store->PointSize; + VB->AttribPtr[_TNL_ATTRIB_POINTSIZE] = &store->PointSize; return GL_TRUE; } @@ -74,13 +73,13 @@ static GLboolean run_point_stage( GLcontext *ctx, /* If point size attenuation is on we'll compute the point size for * each vertex in a special pipeline stage. */ -static void check_point_size( GLcontext *ctx, struct gl_pipeline_stage *d ) +static void check_point_size( GLcontext *ctx, struct tnl_pipeline_stage *d ) { - d->active = ctx->Point._Attenuated; + d->active = ctx->Point._Attenuated && !ctx->VertexProgram._Enabled; } static GLboolean alloc_point_data( GLcontext *ctx, - struct gl_pipeline_stage *stage ) + struct tnl_pipeline_stage *stage ) { struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb; struct point_stage_data *store; @@ -89,7 +88,7 @@ static GLboolean alloc_point_data( GLcontext *ctx, if (!store) return GL_FALSE; - _mesa_vector1f_alloc( &store->PointSize, 0, VB->Size, 32 ); + _mesa_vector4f_alloc( &store->PointSize, 0, VB->Size, 32 ); /* Now run the stage. */ @@ -98,24 +97,24 @@ static GLboolean alloc_point_data( GLcontext *ctx, } -static void free_point_data( struct gl_pipeline_stage *stage ) +static void free_point_data( struct tnl_pipeline_stage *stage ) { struct point_stage_data *store = POINT_STAGE_DATA(stage); if (store) { - _mesa_vector1f_free( &store->PointSize ); + _mesa_vector4f_free( &store->PointSize ); FREE( store ); - stage->privatePtr = 0; + stage->privatePtr = NULL; } } -const struct gl_pipeline_stage _tnl_point_attenuation_stage = +const struct tnl_pipeline_stage _tnl_point_attenuation_stage = { "point size attenuation", /* name */ - _NEW_POINT, /* build_state_change */ - _NEW_POINT, /* run_state_change */ + _NEW_POINT|_NEW_PROGRAM, /* check_state */ + _NEW_POINT, /* run_state */ GL_FALSE, /* active */ - VERT_EYE, /* inputs */ - VERT_POINT_SIZE, /* outputs */ + _TNL_BIT_POS, /* inputs */ + _TNL_BIT_POS, /* outputs */ 0, /* changed_inputs (temporary value) */ NULL, /* stage private data */ free_point_data, /* destructor */