Merge branch 'gallium-0.1' into gallium-tex-surfaces
[mesa.git] / src / mesa / tnl_dd / t_dd_vbtmp.h
index f4b710dfcc3b0d46b774c7df57131c976d0d501b..92dd8931c33b710e3e0e9e58222fd5560a4bc0b9 100644 (file)
@@ -129,7 +129,7 @@ static void TAG(emit)( GLcontext *ctx,
    GLfloat (*col)[4], (*spec)[4];
    GLuint tc0_stride, tc1_stride, col_stride, spec_stride, fog_stride;
    GLuint tc2_stride, tc3_stride;
-   GLuint tc0_size, tc1_size;
+   GLuint tc0_size, tc1_size, col_size;
    GLuint tc2_size, tc3_size;
    GLfloat (*coord)[4];
    GLuint coord_stride;
@@ -186,6 +186,7 @@ static void TAG(emit)( GLcontext *ctx,
    if (DO_RGBA) {
       col_stride = VB->ColorPtr[0]->stride;
       col = VB->ColorPtr[0]->data;
+      col_size = VB->ColorPtr[0]->size;
    }
 
    if (DO_SPEC) {
@@ -244,7 +245,11 @@ static void TAG(emit)( GLcontext *ctx,
         UNCLAMPED_FLOAT_TO_UBYTE(v->v.color.red, col[0][0]);
         UNCLAMPED_FLOAT_TO_UBYTE(v->v.color.green, col[0][1]);
         UNCLAMPED_FLOAT_TO_UBYTE(v->v.color.blue, col[0][2]);
-        UNCLAMPED_FLOAT_TO_UBYTE(v->v.color.alpha, col[0][3]);
+        if (col_size == 4) {
+           UNCLAMPED_FLOAT_TO_UBYTE(v->v.color.alpha, col[0][3]);
+        } else {
+           v->v.color.alpha = CHAN_MAX;
+        }
         STRIDE_4F(col, col_stride);
       }
       if (DO_SPEC) {
@@ -339,7 +344,7 @@ static void TAG(emit)( GLcontext *ctx, GLuint start, GLuint end,
    LOCALVARS
       struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
    GLfloat (*col)[4];
-   GLuint col_stride;
+   GLuint col_stride, col_size;
    GLfloat (*coord)[4] = VB->NdcPtr->data;
    GLuint coord_stride = VB->NdcPtr->stride;
    GLfloat *v = (GLfloat *)dest;
@@ -353,6 +358,7 @@ static void TAG(emit)( GLcontext *ctx, GLuint start, GLuint end,
 
    col = VB->ColorPtr[0]->data;
    col_stride = VB->ColorPtr[0]->stride;
+   col_size = VB->ColorPtr[0]->size;
 
 /*     fprintf(stderr, "%s(small) importable %x\n",  */
 /*        __FUNCTION__, VB->importable_data); */
@@ -379,7 +385,11 @@ static void TAG(emit)( GLcontext *ctx, GLuint start, GLuint end,
         UNCLAMPED_FLOAT_TO_UBYTE(c->red, col[0][0]);
         UNCLAMPED_FLOAT_TO_UBYTE(c->green, col[0][1]);
         UNCLAMPED_FLOAT_TO_UBYTE(c->blue, col[0][2]);
-        UNCLAMPED_FLOAT_TO_UBYTE(c->alpha, col[0][3]);
+        if (col_size == 4) {
+           UNCLAMPED_FLOAT_TO_UBYTE(c->alpha, col[0][3]);
+        } else {
+           c->alpha = CHAN_MAX;
+        }
         STRIDE_4F( col, col_stride );
       }
 /*      fprintf(stderr, "vert %d: %.2f %.2f %.2f %x\n",  */