fragment program execution
[mesa.git] / src / mesa / tnl / t_vb_points.c
index 94a9dc27a31997553f2a82b09ef16b41cc86b39f..5bf1be12a66207f9e5154926b9760b12e52a5f0c 100644 (file)
@@ -1,10 +1,10 @@
-/* $Id: t_vb_points.c,v 1.2 2001/03/03 20:33:31 brianp Exp $ */
+/* $Id: t_vb_points.c,v 1.10 2002/10/29 20:29:04 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
- * Version:  3.5
+ * Version:  4.1
  *
- * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2002  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"),
  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  *
- * Author:
- *    Brian Paul <brian@valinux.com>
+ * Authors:
+ *    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->private)
+#define POINT_STAGE_DATA(stage) ((struct point_stage_data *)stage->privatePtr)
 
 
 /*
  * Compute attenuated point sizes
  */
-static GLboolean run_point_stage( GLcontext *ctx, 
+static GLboolean run_point_stage( GLcontext *ctx,
                                  struct gl_pipeline_stage *stage )
 {
    struct point_stage_data *store = POINT_STAGE_DATA(stage);
@@ -53,7 +53,7 @@ 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) {
@@ -61,12 +61,12 @@ static GLboolean run_point_stage( GLcontext *ctx,
       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));
+        size[i][0] = pointSize / (p0 + dist * (p1 + dist * p2));
       }
    }
 
    VB->PointSizePtr = &store->PointSize;
-   
+
    return GL_TRUE;
 }
 
@@ -76,7 +76,7 @@ static GLboolean run_point_stage( GLcontext *ctx,
  */
 static void check_point_size( GLcontext *ctx, struct gl_pipeline_stage *d )
 {
-   d->active = ctx->Point._Attenuated;
+   d->active = ctx->Point._Attenuated && !ctx->VertexProgram.Enabled;
 }
 
 static GLboolean alloc_point_data( GLcontext *ctx,
@@ -84,12 +84,12 @@ static GLboolean alloc_point_data( GLcontext *ctx,
 {
    struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
    struct point_stage_data *store;
-   stage->private = MALLOC(sizeof(*store));
+   stage->privatePtr = MALLOC(sizeof(*store));
    store = POINT_STAGE_DATA(stage);
    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.
     */
@@ -102,22 +102,22 @@ static void free_point_data( struct gl_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->private = 0;
+      stage->privatePtr = 0;
    }
 }
 
-const struct gl_pipeline_stage _tnl_point_attenuation_stage = 
-{ 
+const struct gl_pipeline_stage _tnl_point_attenuation_stage =
+{
    "point size attenuation",   /* name */
    _NEW_POINT,                 /* build_state_change */
    _NEW_POINT,                 /* run_state_change */
-   0,                          /* active */
-   VERT_EYE,                   /* inputs */
-   VERT_POINT_SIZE,            /* outputs */
+   GL_FALSE,                   /* active */
+   VERT_BIT_EYE,                       /* inputs */
+   VERT_BIT_POINT_SIZE,                /* outputs */
    0,                          /* changed_inputs (temporary value) */
-   0,                          /* stage private data */
+   NULL,                       /* stage private data */
    free_point_data,            /* destructor */
    check_point_size,           /* check */
    alloc_point_data            /* run -- initially set to alloc data */