Add _tnl_set_attr() to complement existing get_attr() call.
authorKeith Whitwell <keith@tungstengraphics.com>
Mon, 16 Feb 2004 15:15:24 +0000 (15:15 +0000)
committerKeith Whitwell <keith@tungstengraphics.com>
Mon, 16 Feb 2004 15:15:24 +0000 (15:15 +0000)
src/mesa/tnl/t_vertex.c
src/mesa/tnl/t_vertex.h

index 87931aae62fece49e050f940c503f6535594cf51..172733f575d04f04fcd51f91d90023b4cbdc1246 100644 (file)
@@ -937,11 +937,31 @@ void _tnl_get_attr( GLcontext *ctx, const void *vin,
       }
    }
 
-   /* Else return the value from ctx->Current
+   /* Else return the value from ctx->Current -- dangerous???
     */
    _mesa_memcpy( dest, ctx->Current.Attrib[attr], 4*sizeof(GLfloat));
 }
 
+
+/* Complementary operation to the above.
+ */
+void _tnl_set_attr( GLcontext *ctx, void *vout,
+                   GLenum attr, const GLfloat *src )
+{
+   struct tnl_clipspace *vtx = GET_VERTEX_STATE(ctx);
+   const struct tnl_clipspace_attr *a = vtx->attr;
+   int attr_count = vtx->attr_count;
+   int j;
+
+   for (j = 0; j < attr_count; j++) {
+      if (a[j].attrib == (int)attr) {
+        a[j].insert[4-1]( &a[j], (GLubyte *)vout + a[j].vertoffset, src );
+        return;
+      }
+   }
+}
+
+
 void *_tnl_get_vertex( GLcontext *ctx, GLuint nr )
 {
    struct tnl_clipspace *vtx = GET_VERTEX_STATE(ctx);
@@ -981,8 +1001,8 @@ GLuint _tnl_install_attrs( GLcontext *ctx, const struct tnl_attr_map *map,
       if (format == EMIT_PAD) {
         offset += map[i].offset;
 
-/*         fprintf(stderr, "%d: pad %d, offset now %d\n", i,  */
-/*                 map[i].offset, offset);  */
+/*      fprintf(stderr, "%d: pad %d, offset now %d\n", i,   */
+/*              map[i].offset, offset);   */
 
       }
       else {
@@ -997,8 +1017,8 @@ GLuint _tnl_install_attrs( GLcontext *ctx, const struct tnl_attr_map *map,
         else
            vtx->attr[j].vertoffset = offset;
         
-/*         fprintf(stderr, "%d: %s offset %d\n", i,  */
-/*                 format_info[format].name, vtx->attr[j].vertoffset);  */
+/*      fprintf(stderr, "%d: %s offset %d\n", i,  */
+/*              format_info[format].name, vtx->attr[j].vertoffset);   */
         
         offset += format_info[format].attrsize;
         j++;
index 6c58ca994b3754d05fe07c7908219ebc12490f92..04106264ff261afb5c02998490795bcfe249bdc1 100644 (file)
@@ -82,6 +82,12 @@ extern void _tnl_copy_pv(  GLcontext *ctx, GLuint edst, GLuint esrc );
 extern void _tnl_get_attr( GLcontext *ctx, const void *vertex, GLenum attrib,
                           GLfloat *dest );
 
+/* Complementary to the above.
+ */
+extern void _tnl_set_attr( GLcontext *ctx, void *vout, GLenum attrib, 
+                          const GLfloat *src );
+
+
 extern void *_tnl_get_vertex( GLcontext *ctx, GLuint nr );