More work on ARB_vertex_buffer_object.
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 17 Sep 2003 03:40:11 +0000 (03:40 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 17 Sep 2003 03:40:11 +0000 (03:40 +0000)
Use GLubyte * instead of void * for gl_client_array->Ptr to simplify upcoming
pointer arithmetic changes.

12 files changed:
src/mesa/array_cache/ac_context.c
src/mesa/array_cache/ac_import.c
src/mesa/main/arbprogram.c
src/mesa/main/bufferobj.c
src/mesa/main/bufferobj.h
src/mesa/main/context.c
src/mesa/main/get.c
src/mesa/main/mtypes.h
src/mesa/main/nvprogram.c
src/mesa/main/varray.c
src/mesa/tnl/t_imm_exec.c
src/mesa/tnl/t_vb_program.c

index 0cd3b8b4fc1cf5bef96a151e3c13ba17ef1879e7..e3c09fbd202392ddf68ce964cb9457d608b5b85f 100644 (file)
@@ -1,4 +1,3 @@
-
 /*
  * Mesa 3-D graphics library
  * Version:  5.1
@@ -52,6 +51,9 @@ static void _ac_fallbacks_init( GLcontext *ctx )
    cl->Ptr = (void *) ctx->Current.Attrib[VERT_ATTRIB_NORMAL];
    cl->Enabled = 1;
    cl->Flags = CA_CLIENT_DATA; /* hack */
+#if FEATURE_ARB_vertex_buffer_object
+   cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
 
    cl = &ac->Fallback.Color;
    cl->Size = 4;
@@ -61,6 +63,9 @@ static void _ac_fallbacks_init( GLcontext *ctx )
    cl->Ptr = (void *) ctx->Current.Attrib[VERT_ATTRIB_COLOR0];
    cl->Enabled = 1;
    cl->Flags = CA_CLIENT_DATA; /* hack */
+#if FEATURE_ARB_vertex_buffer_object
+   cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
 
    cl = &ac->Fallback.SecondaryColor;
    cl->Size = 3;
@@ -70,6 +75,9 @@ static void _ac_fallbacks_init( GLcontext *ctx )
    cl->Ptr = (void *) ctx->Current.Attrib[VERT_ATTRIB_COLOR1];
    cl->Enabled = 1;
    cl->Flags = CA_CLIENT_DATA; /* hack */
+#if FEATURE_ARB_vertex_buffer_object
+   cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
 
    cl = &ac->Fallback.FogCoord;
    cl->Size = 1;
@@ -79,6 +87,9 @@ static void _ac_fallbacks_init( GLcontext *ctx )
    cl->Ptr = (void *) &ctx->Current.Attrib[VERT_ATTRIB_FOG];
    cl->Enabled = 1;
    cl->Flags = CA_CLIENT_DATA; /* hack */
+#if FEATURE_ARB_vertex_buffer_object
+   cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
 
    cl = &ac->Fallback.Index;
    cl->Size = 1;
@@ -88,6 +99,9 @@ static void _ac_fallbacks_init( GLcontext *ctx )
    cl->Ptr = (void *) &ctx->Current.Index;
    cl->Enabled = 1;
    cl->Flags = CA_CLIENT_DATA; /* hack */
+#if FEATURE_ARB_vertex_buffer_object
+   cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
 
    for (i = 0 ; i < MAX_TEXTURE_COORD_UNITS ; i++) {
       cl = &ac->Fallback.TexCoord[i];
@@ -98,6 +112,9 @@ static void _ac_fallbacks_init( GLcontext *ctx )
       cl->Ptr = (void *) ctx->Current.Attrib[VERT_ATTRIB_TEX0 + i];
       cl->Enabled = 1;
       cl->Flags = CA_CLIENT_DATA;      /* hack */
+#if FEATURE_ARB_vertex_buffer_object
+      cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
    }
 
    cl = &ac->Fallback.EdgeFlag;
@@ -108,6 +125,9 @@ static void _ac_fallbacks_init( GLcontext *ctx )
    cl->Ptr = (void *) &ctx->Current.EdgeFlag;
    cl->Enabled = 1;
    cl->Flags = CA_CLIENT_DATA; /* hack */
+#if FEATURE_ARB_vertex_buffer_object
+   cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
 
    for (i = 0; i < VERT_ATTRIB_MAX; i++) {
       cl = &ac->Fallback.Attrib[i];
@@ -118,6 +138,9 @@ static void _ac_fallbacks_init( GLcontext *ctx )
       cl->Ptr = (void *) ctx->Current.Attrib[i];
       cl->Enabled = 1;
       cl->Flags = CA_CLIENT_DATA; /* hack */
+#if FEATURE_ARB_vertex_buffer_object
+      cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
    }
 }
 
@@ -140,6 +163,9 @@ static void _ac_cache_init( GLcontext *ctx )
    cl->Ptr = MALLOC( cl->StrideB * size );
    cl->Enabled = 1;
    cl->Flags = 0;
+#if FEATURE_ARB_vertex_buffer_object
+   cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
 
    cl = &ac->Cache.Normal;
    cl->Size = 3;
@@ -149,6 +175,9 @@ static void _ac_cache_init( GLcontext *ctx )
    cl->Ptr = MALLOC( cl->StrideB * size );
    cl->Enabled = 1;
    cl->Flags = 0;
+#if FEATURE_ARB_vertex_buffer_object
+   cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
 
    cl = &ac->Cache.Color;
    cl->Size = 4;
@@ -158,6 +187,9 @@ static void _ac_cache_init( GLcontext *ctx )
    cl->Ptr = MALLOC( cl->StrideB * size );
    cl->Enabled = 1;
    cl->Flags = 0;
+#if FEATURE_ARB_vertex_buffer_object
+   cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
 
    cl = &ac->Cache.SecondaryColor;
    cl->Size = 3;
@@ -167,6 +199,9 @@ static void _ac_cache_init( GLcontext *ctx )
    cl->Ptr = MALLOC( cl->StrideB * size );
    cl->Enabled = 1;
    cl->Flags = 0;
+#if FEATURE_ARB_vertex_buffer_object
+   cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
 
    cl = &ac->Cache.FogCoord;
    cl->Size = 1;
@@ -176,6 +211,9 @@ static void _ac_cache_init( GLcontext *ctx )
    cl->Ptr = MALLOC( cl->StrideB * size );
    cl->Enabled = 1;
    cl->Flags = 0;
+#if FEATURE_ARB_vertex_buffer_object
+   cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
 
    cl = &ac->Cache.Index;
    cl->Size = 1;
@@ -185,6 +223,9 @@ static void _ac_cache_init( GLcontext *ctx )
    cl->Ptr = MALLOC( cl->StrideB * size );
    cl->Enabled = 1;
    cl->Flags = 0;
+#if FEATURE_ARB_vertex_buffer_object
+   cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
 
    for (i = 0; i < MAX_TEXTURE_COORD_UNITS; i++) {
       cl = &ac->Cache.TexCoord[i];
@@ -195,6 +236,9 @@ static void _ac_cache_init( GLcontext *ctx )
       cl->Ptr = MALLOC( cl->StrideB * size );
       cl->Enabled = 1;
       cl->Flags = 0;
+#if FEATURE_ARB_vertex_buffer_object
+      cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
    }
 
    cl = &ac->Cache.EdgeFlag;
@@ -205,6 +249,9 @@ static void _ac_cache_init( GLcontext *ctx )
    cl->Ptr = MALLOC( cl->StrideB * size );
    cl->Enabled = 1;
    cl->Flags = 0;
+#if FEATURE_ARB_vertex_buffer_object
+   cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
 
    for (i = 0 ; i < VERT_ATTRIB_MAX; i++) {
       cl = &ac->Cache.Attrib[i];
@@ -215,6 +262,9 @@ static void _ac_cache_init( GLcontext *ctx )
       cl->Ptr = MALLOC( cl->StrideB * size );
       cl->Enabled = 1;
       cl->Flags = 0;
+#if FEATURE_ARB_vertex_buffer_object
+      cl->BufferObj = ctx->Array.NullBufferObj;
+#endif
    }
 }
 
index ee15a6d7490d0578ce9bce109172c49e83d12eab..b2b7eeb219b80a7a33751e5839dc617b88e5d54e 100644 (file)
@@ -36,7 +36,7 @@
 
 #define STRIDE_ARRAY( array, offset )          \
 do {                                           \
-   char *tmp = (char *) (array).Ptr;           \
+   GLubyte *tmp = (array).Ptr;                 \
    tmp += (offset) * (array).StrideB;          \
    (array).Ptr = tmp;                          \
 } while (0)
index e5daf179607ef1e70747e9aeaf05351a926b5af1..b4ebe01399fb19331e0e03094682e0af8a36f74e 100644 (file)
@@ -135,7 +135,7 @@ _mesa_GetVertexAttribfvARB(GLuint index, GLenum pname, GLfloat *params)
             _mesa_error(ctx, GL_INVALID_ENUM, "glGetVertexAttribfvARB(pname)");
             return;
          }
-         params[0] = (GLfloat) ctx->Array.VertexAttrib[index].BufferBinding;
+         params[0] = (GLfloat) ctx->Array.VertexAttrib[index].BufferObj->Name;
       default:
          _mesa_error(ctx, GL_INVALID_ENUM, "glGetVertexAttribfvARB(pname)");
          return;
index 344cf06ec4d812e8d6a6a76b424771ca0a109726..45631c924b4b64d184d1ed0eaf34a222567bcfe4 100644 (file)
 #include "bufferobj.h"
 
 
-struct gl_buffer_object {
-   GLint RefCount;
-   GLuint Name;
-   GLenum Target;
-   
-   GLenum usage;
-   GLenum access;
-   GLvoid * pointer;
-   GLuint  size;
-
-   void * data;
-};
-
-
 /**
  * Get the buffer object bound to the specified target in a GL context.
  *
@@ -69,16 +55,19 @@ buffer_object_get_target( GLcontext *ctx, GLenum target, const char * str )
 
    switch (target) {
       case GL_ARRAY_BUFFER_ARB:
-         bufObj = ctx->ArrayBuffer;
+         bufObj = ctx->Array.ArrayBufferObj;
          break;
       case GL_ELEMENT_ARRAY_BUFFER_ARB:
-         bufObj = ctx->ElementArrayBuffer;
+         bufObj = ctx->Array.ElementArrayBufferObj;
          break;
       default:
          _mesa_error(ctx, GL_INVALID_ENUM, "gl%s(target)", str);
          break;
    }
-   
+
+   if (bufObj->Name == 0)
+      return NULL;
+
    return bufObj;
 }
 
@@ -121,13 +110,13 @@ buffer_object_subdata_range_good( GLcontext * ctx, GLenum target,
       return NULL;
    }
 
-   if ( (offset + size) > bufObj->size ) {
+   if ( (offset + size) > bufObj->Size ) {
       _mesa_error(ctx, GL_INVALID_VALUE,
                  "gl%s(size + offset > buffer size)", str);
       return NULL;
    }
 
-   if ( bufObj->pointer != NULL ) {
+   if ( bufObj->Pointer != NULL ) {
       _mesa_error(ctx, GL_INVALID_OPERATION, "gl%s", str);
       return NULL;
    }
@@ -152,6 +141,21 @@ _mesa_new_buffer_object( GLcontext *ctx, GLuint name, GLenum target )
 }
 
 
+/**
+ * Delete a buffer object.
+ * 
+ * This function is intended to be called via
+ * \c dd_function_table::DeleteBufferObject.
+ */
+void
+_mesa_delete_buffer_object( GLcontext *ctx, struct gl_buffer_object *bufObj )
+{
+   if (bufObj->Data)
+      _mesa_free(bufObj->Data);
+   _mesa_free(bufObj);
+}
+
+
 /**
  * Initialize a buffer object to default values.
  */
@@ -220,14 +224,14 @@ _mesa_buffer_data( GLcontext *ctx, GLenum target, GLsizeiptrARB size,
 
    (void) target;
 
-   new_data = _mesa_realloc( bufObj->data, bufObj->size, size );
+   new_data = _mesa_realloc( bufObj->Data, bufObj->Size, size );
    if ( new_data != NULL ) {
-      bufObj->data = new_data;
-      bufObj->size = size;
-      bufObj->usage = usage;
+      bufObj->Data = new_data;
+      bufObj->Size = size;
+      bufObj->Usage = usage;
 
       if ( data != NULL ) {
-        _mesa_memcpy( bufObj->data, data, size );
+        _mesa_memcpy( bufObj->Data, data, size );
       }
    }
 }
@@ -256,9 +260,9 @@ _mesa_buffer_subdata( GLcontext *ctx, GLenum target, GLintptrARB offset,
                      GLsizeiptrARB size, const GLvoid * data,
                      struct gl_buffer_object * bufObj )
 {
-   if ( (bufObj->data != NULL)
-       && ((size + offset) <= bufObj->size) ) {
-      _mesa_memcpy( (GLubyte *) bufObj->data + offset, data, size );
+   if ( (bufObj->Data != NULL)
+       && ((size + offset) <= bufObj->Size) ) {
+      _mesa_memcpy( (GLubyte *) bufObj->Data + offset, data, size );
    }
 }
 
@@ -286,9 +290,9 @@ _mesa_buffer_get_subdata( GLcontext *ctx, GLenum target, GLintptrARB offset,
                          GLsizeiptrARB size, GLvoid * data,
                          struct gl_buffer_object * bufObj )
 {
-   if ( (bufObj->data != NULL)
-       && ((size + offset) <= bufObj->size) ) {
-      _mesa_memcpy( data, (GLubyte *) bufObj->data + offset, size );
+   if ( (bufObj->Data != NULL)
+       && ((size + offset) <= bufObj->Size) ) {
+      _mesa_memcpy( data, (GLubyte *) bufObj->Data + offset, size );
    }
 }
 
@@ -313,10 +317,44 @@ void *
 _mesa_buffer_map( GLcontext *ctx, GLenum target, GLenum access,
                  struct gl_buffer_object * bufObj )
 {
-   return bufObj->data;
+   return bufObj->Data;
+}
+
+
+/**
+ * Initialize the state associated with buffer objects
+ */
+void
+_mesa_init_buffer_objects( GLcontext *ctx )
+{
+   GLuint i;
+
+   ctx->Array.NullBufferObj = _mesa_new_buffer_object(ctx, 0, 0);
+   ctx->Array.ArrayBufferObj = ctx->Array.NullBufferObj;
+   ctx->Array.ElementArrayBufferObj = ctx->Array.NullBufferObj;
+
+   /* Vertex array buffers */
+   ctx->Array.Vertex.BufferObj = ctx->Array.NullBufferObj;
+   ctx->Array.Normal.BufferObj = ctx->Array.NullBufferObj;
+   ctx->Array.Color.BufferObj = ctx->Array.NullBufferObj;
+   ctx->Array.SecondaryColor.BufferObj = ctx->Array.NullBufferObj;
+   ctx->Array.FogCoord.BufferObj = ctx->Array.NullBufferObj;
+   ctx->Array.Index.BufferObj = ctx->Array.NullBufferObj;
+   for (i = 0; i < MAX_TEXTURE_UNITS; i++) {
+      ctx->Array.TexCoord[i].BufferObj = ctx->Array.NullBufferObj;
+   }
+   ctx->Array.EdgeFlag.BufferObj = ctx->Array.NullBufferObj;
+   for (i = 0; i < VERT_ATTRIB_MAX; i++) {
+      ctx->Array.VertexAttrib[i].BufferObj = ctx->Array.NullBufferObj;
+   }
 }
 
 
+
+/**********************************************************************/
+/* API Functions                                                      */
+/**********************************************************************/
+
 void
 _mesa_BindBufferARB(GLenum target, GLuint buffer)
 {
@@ -333,7 +371,10 @@ _mesa_BindBufferARB(GLenum target, GLuint buffer)
     * Get pointer to new buffer object (newBufObj)
     */
    if ( buffer == 0 ) {
-      newBufObj = NULL;
+      /* The spec says there's not a buffer object named 0, but we use
+       * one internally because it simplifies things.
+       */
+      newBufObj = ctx->Array.NullBufferObj;
    }
    else {
       /* non-default buffer object */
@@ -363,10 +404,10 @@ _mesa_BindBufferARB(GLenum target, GLuint buffer)
    
    switch (target) {
       case GL_ARRAY_BUFFER_ARB:
-         ctx->ArrayBuffer = newBufObj;
+         ctx->Array.ArrayBufferObj = newBufObj;
          break;
       case GL_ELEMENT_ARRAY_BUFFER_ARB:
-         ctx->ElementArrayBuffer = newBufObj;
+         ctx->Array.ElementArrayBufferObj = newBufObj;
          break;
    }
 
@@ -475,7 +516,7 @@ _mesa_GenBuffersARB(GLsizei n, GLuint *buffer)
       GLuint name = first + i;
       GLenum target = 0;
       bufObj = (*ctx->Driver.NewBufferObject)( ctx, name, target );
-      if ( bufObj != NULL ) {
+      if (!bufObj) {
          _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenBuffersARB");
          return;
       }
@@ -618,18 +659,18 @@ _mesa_MapBufferARB(GLenum target, GLenum access)
       return NULL;
    }
 
-   if ( bufObj->pointer != NULL ) {
+   if ( bufObj->Pointer != NULL ) {
       _mesa_error(ctx, GL_INVALID_OPERATION, "glMapBufferARB");
       return NULL;
    }
 
    ASSERT(ctx->Driver.MapBuffer);
-   bufObj->pointer = (*ctx->Driver.MapBuffer)( ctx, target, access, bufObj );
-   if ( bufObj->pointer == NULL ) {
+   bufObj->Pointer = (*ctx->Driver.MapBuffer)( ctx, target, access, bufObj );
+   if ( bufObj->Pointer == NULL ) {
       _mesa_error(ctx, GL_OUT_OF_MEMORY, "glMapBufferARB(access)");
    }
 
-   return bufObj->pointer;
+   return bufObj->Pointer;
 }
 
 
@@ -644,11 +685,11 @@ _mesa_UnmapBufferARB(GLenum target)
 
    bufObj = buffer_object_get_target( ctx, target, "UnmapBufferARB" );
    if ( bufObj == NULL ) {
-      _mesa_error(ctx, GL_INVALID_OPERATION, "glBufferSubDataARB" );
+      _mesa_error(ctx, GL_INVALID_OPERATION, "glUnmapBufferARB" );
       return GL_FALSE;
    }
 
-   if ( bufObj->pointer == NULL ) {
+   if ( bufObj->Pointer == NULL ) {
       _mesa_error(ctx, GL_INVALID_OPERATION, "glUnmapBufferARB");
       return GL_FALSE;
    }
@@ -657,7 +698,7 @@ _mesa_UnmapBufferARB(GLenum target)
       status = (*ctx->Driver.UnmapBuffer)( ctx, target, bufObj );
    }
 
-   bufObj->pointer = NULL;
+   bufObj->Pointer = NULL;
 
    return status;
 }
@@ -678,16 +719,16 @@ _mesa_GetBufferParameterivARB(GLenum target, GLenum pname, GLint *params)
 
    switch (pname) {
       case GL_BUFFER_SIZE_ARB:
-         *params = bufObj->size;
+         *params = bufObj->Size;
          break;
       case GL_BUFFER_USAGE_ARB:
-         *params = bufObj->usage;
+         *params = bufObj->Usage;
          break;
       case GL_BUFFER_ACCESS_ARB:
-         *params = bufObj->access;
+         *params = bufObj->Access;
          break;
       case GL_BUFFER_MAPPED_ARB:
-         *params = (bufObj->pointer != NULL);
+         *params = (bufObj->Pointer != NULL);
          break;
       default:
          _mesa_error(ctx, GL_INVALID_ENUM, "glGetBufferParameterivARB(pname)");
@@ -714,5 +755,5 @@ _mesa_GetBufferPointervARB(GLenum target, GLenum pname, GLvoid **params)
       return;
    }
 
-   *params = bufObj->pointer;
+   *params = bufObj->Pointer;
 }
index ca5c99cac42cd67766c944943e84550ad1b8e1cd..dddaa52714761e1664c2924fefcc946aad843e52 100644 (file)
 #define BUFFEROBJ_H
 
 
+#include "context.h"
+
+
 /*
  * Internal functions
  */
 
+extern void
+_mesa_init_buffer_objects( GLcontext *ctx );
+
 extern void
 _mesa_initialize_buffer_object( struct gl_buffer_object *obj,
                                 GLuint name, GLenum target );
@@ -40,6 +46,9 @@ _mesa_initialize_buffer_object( struct gl_buffer_object *obj,
 extern struct gl_buffer_object *
 _mesa_new_buffer_object( GLcontext *ctx, GLuint name, GLenum target );
 
+extern void
+_mesa_delete_buffer_object( GLcontext *ctx, struct gl_buffer_object *bufObj );
+
 extern void
 _mesa_initialize_buffer_object( struct gl_buffer_object *obj,
                                GLuint name, GLenum target );
index dea778c39a9778e3e6c1cb8ab7ee7683a26051d3..ee299cd3113c707efc3501155bd826b473416016 100644 (file)
@@ -77,6 +77,7 @@
 #include "attrib.h"
 #include "blend.h"
 #include "buffers.h"
+#include "bufferobj.h"
 #include "colortab.h"
 #include "context.h"
 #include "debug.h"
@@ -1092,6 +1093,7 @@ init_attrib_groups( GLcontext *ctx )
    _mesa_init_accum( ctx );
    _mesa_init_attrib( ctx );
    _mesa_init_buffers( ctx );
+   _mesa_init_buffer_objects( ctx );
    _mesa_init_color( ctx );
    _mesa_init_colortables( ctx );
    _mesa_init_current( ctx );
index 0105c52b674436e4cf8c7d392d5830effe478868..06d7172503911ed0a48436aa24865455e9a31c86 100644 (file)
@@ -1558,44 +1558,44 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
 #if FEATURE_ARB_vertex_buffer_object
       case GL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.ArrayBufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.ArrayBufferObj->Name);
          break;
       case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.Vertex.BufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.Vertex.BufferObj->Name);
          break;
       case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.Normal.BufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.Normal.BufferObj->Name);
          break;
       case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.Color.BufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.Color.BufferObj->Name);
          break;
       case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.Index.BufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.Index.BufferObj->Name);
          break;
       case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.TexCoord[clientUnit].BufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.TexCoord[clientUnit].BufferObj->Name);
          break;
       case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.EdgeFlag.BufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.EdgeFlag.BufferObj->Name);
          break;
       case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.SecondaryColor.BufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.SecondaryColor.BufferObj->Name);
          break;
       case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.FogCoord.BufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.FogCoord.BufferObj->Name);
          break;
       /*case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB: - not supported */
       case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.ElementArrayBufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.ElementArrayBufferObj->Name);
          break;
 #endif
 
@@ -3095,44 +3095,44 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
 #if FEATURE_ARB_vertex_buffer_object
       case GL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.ArrayBufferBinding;
+         *params = (GLdouble) ctx->Array.ArrayBufferObj->Name;
          break;
       case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.Vertex.BufferBinding;
+         *params = (GLdouble) ctx->Array.Vertex.BufferObj->Name;
          break;
       case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.Normal.BufferBinding;
+         *params = (GLdouble) ctx->Array.Normal.BufferObj->Name;
          break;
       case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.Color.BufferBinding;
+         *params = (GLdouble) ctx->Array.Color.BufferObj->Name;
          break;
       case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.Index.BufferBinding;
+         *params = (GLdouble) ctx->Array.Index.BufferObj->Name;
          break;
       case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.TexCoord[clientUnit].BufferBinding;
+         *params = (GLdouble) ctx->Array.TexCoord[clientUnit].BufferObj->Name;
          break;
       case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.EdgeFlag.BufferBinding;
+         *params = (GLdouble) ctx->Array.EdgeFlag.BufferObj->Name;
          break;
       case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.SecondaryColor.BufferBinding;
+         *params = (GLdouble) ctx->Array.SecondaryColor.BufferObj->Name;
          break;
       case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.FogCoord.BufferBinding;
+         *params = (GLdouble) ctx->Array.FogCoord.BufferObj->Name;
          break;
       /*case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB: - not supported */
       case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.ElementArrayBufferBinding;
+         *params = (GLdouble) ctx->Array.ElementArrayBufferObj->Name;
          break;
 #endif
 
@@ -4608,44 +4608,44 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
 #if FEATURE_ARB_vertex_buffer_object
       case GL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.ArrayBufferBinding;
+         *params = (GLfloat) ctx->Array.ArrayBufferObj->Name;
          break;
       case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.Vertex.BufferBinding;
+         *params = (GLfloat) ctx->Array.Vertex.BufferObj->Name;
          break;
       case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.Normal.BufferBinding;
+         *params = (GLfloat) ctx->Array.Normal.BufferObj->Name;
          break;
       case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.Color.BufferBinding;
+         *params = (GLfloat) ctx->Array.Color.BufferObj->Name;
          break;
       case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.Index.BufferBinding;
+         *params = (GLfloat) ctx->Array.Index.BufferObj->Name;
          break;
       case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.TexCoord[clientUnit].BufferBinding;
+         *params = (GLfloat) ctx->Array.TexCoord[clientUnit].BufferObj->Name;
          break;
       case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.EdgeFlag.BufferBinding;
+         *params = (GLfloat) ctx->Array.EdgeFlag.BufferObj->Name;
          break;
       case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.SecondaryColor.BufferBinding;
+         *params = (GLfloat) ctx->Array.SecondaryColor.BufferObj->Name;
          break;
       case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.FogCoord.BufferBinding;
+         *params = (GLfloat) ctx->Array.FogCoord.BufferObj->Name;
          break;
       /*case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB: - not supported */
       case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.ElementArrayBufferBinding;
+         *params = (GLfloat) ctx->Array.ElementArrayBufferObj->Name;
          break;
 #endif
 
@@ -6159,44 +6159,44 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
 #if FEATURE_ARB_vertex_buffer_object
       case GL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.ArrayBufferBinding;
+         *params = (GLint) ctx->Array.ArrayBufferObj->Name;
          break;
       case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.Vertex.BufferBinding;
+         *params = (GLint) ctx->Array.Vertex.BufferObj->Name;
          break;
       case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.Normal.BufferBinding;
+         *params = (GLint) ctx->Array.Normal.BufferObj->Name;
          break;
       case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.Color.BufferBinding;
+         *params = (GLint) ctx->Array.Color.BufferObj->Name;
          break;
       case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.Index.BufferBinding;
+         *params = (GLint) ctx->Array.Index.BufferObj->Name;
          break;
       case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.TexCoord[clientUnit].BufferBinding;
+         *params = (GLint) ctx->Array.TexCoord[clientUnit].BufferObj->Name;
          break;
       case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.EdgeFlag.BufferBinding;
+         *params = (GLint) ctx->Array.EdgeFlag.BufferObj->Name;
          break;
       case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.SecondaryColor.BufferBinding;
+         *params = (GLint) ctx->Array.SecondaryColor.BufferObj->Name;
          break;
       case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.FogCoord.BufferBinding;
+         *params = (GLint) ctx->Array.FogCoord.BufferObj->Name;
          break;
       /*case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB: - not supported */
       case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.ElementArrayBufferBinding;
+         *params = (GLint) ctx->Array.ElementArrayBufferObj->Name;
          break;
 #endif
 
index a2acb1f400b2e371ad1143d49a42a7f3bb8cdbb6..341a028ee6f99d01cc05d36605917f5c8082a3af 100644 (file)
@@ -1251,6 +1251,22 @@ struct gl_attrib_node {
 };
 
 
+/**
+ * GL_ARB_vertex_buffer_object buffer object
+ */
+struct gl_buffer_object {
+   GLint RefCount;
+   GLuint Name;
+   GLenum Target;
+   GLenum Usage;
+   GLenum Access;
+   GLvoid *Pointer;   /**< Only valid while buffer is mapped */
+   GLuint Size;       /**< Size of data array in bytes */
+   GLubyte *Data;        /**< The storage */
+};
+
+
+
 /**
  * Client pixel packing/unpacking attributes
  */
@@ -1279,11 +1295,13 @@ struct gl_client_array {
    GLenum Type;
    GLsizei Stride;             /**< user-specified stride */
    GLsizei StrideB;            /**< actual stride in bytes */
-   void *Ptr;
+   GLubyte *Ptr;
    GLuint Flags;
    GLuint Enabled;             /**< one of the _NEW_ARRAY_ bits */
    GLboolean Normalized;        /**< GL_ARB_vertex_program */
-   GLuint BufferBinding;        /**< GL_ARB_vertex_buffer_object */
+
+   /**< GL_ARB_vertex_buffer_object */
+   struct gl_buffer_object *BufferObj;
 };
 
 
@@ -1304,15 +1322,17 @@ struct gl_array_attrib {
 
    GLint TexCoordInterleaveFactor;
    GLint ActiveTexture;                /**< Client Active Texture */
-   GLuint LockFirst;
-   GLuint LockCount;
+   GLuint LockFirst;            /**< GL_EXT_compiled_vertex_array */
+   GLuint LockCount;            /**< GL_EXT_compiled_vertex_array */
 
    GLuint _Enabled;            /**< _NEW_ARRAY_* - bit set if array enabled */
    GLuint NewState;            /**< _NEW_ARRAY_* */
 
-   /* GL_ARB_vertex_buffer_object */
-   GLuint ArrayBufferBinding;
-   GLuint ElementArrayBufferBinding;
+#if FEATURE_ARB_vertex_buffer_object
+   struct gl_buffer_object *NullBufferObj;
+   struct gl_buffer_object *ArrayBufferObj;
+   struct gl_buffer_object *ElementArrayBufferObj;
+#endif
 };
 
 
@@ -1589,8 +1609,9 @@ struct gl_shared_state
 #endif
    /*@}*/
 
-   /** GL_ARB_vertex_buffer_objects */
+#if FEATURE_ARB_vertex_buffer_object
    struct _mesa_HashTable *BufferObjects;
+#endif
 
    void *DriverData;  /**< Device driver shared state */
 };
@@ -1979,7 +2000,6 @@ typedef union node Node;
 
 
 /* This has to be included here. */
-struct gl_buffer_object;
 #include "dd.h"
 
 
@@ -2215,18 +2235,6 @@ struct __GLcontextRec {
    /** Core tnl module support */
    struct gl_tnl_module TnlModule;
 
-   /**
-    * \name GL_ARB_vertex_buffer_object state
-    * 
-    * These pointers track the buffer objects last bound via
-    * \c glBindBufferObjectARB.  If it the last bound object ID was 0 for a
-    * given target, the pointer will be \c NULL.
-    */
-   /*@{*/
-   struct gl_buffer_object * ArrayBuffer;
-   struct gl_buffer_object * ElementArrayBuffer;
-   /*@}*/
-
    /**
     * \name Hooks for module contexts.  
     *
index db95638e263478055e5e2b69809324d341f189b3..2fb207728791e51473197be15e139d220a28cc06 100644 (file)
@@ -454,7 +454,7 @@ _mesa_GetVertexAttribivNV(GLuint index, GLenum pname, GLint *params)
             _mesa_error(ctx, GL_INVALID_ENUM, "glGetVertexAttribdvNV");
             return;
          }
-         params[0] = ctx->Array.VertexAttrib[index].BufferBinding;
+         params[0] = ctx->Array.VertexAttrib[index].BufferObj->Name;
          break;
       default:
          _mesa_error(ctx, GL_INVALID_ENUM, "glGetVertexAttribdvNV");
index 14f609d31ddcc8b26778e63c7e66b638770ad234..822935b765325b0831671e362845dde02bfd3a76 100644 (file)
 
 
 #include "glheader.h"
+#include "imports.h"
 #include "context.h"
 #include "enable.h"
 #include "enums.h"
 #include "dlist.h"
-#include "light.h"
-#include "macros.h"
-#include "state.h"
 #include "texstate.h"
 #include "mtypes.h"
 #include "varray.h"
-#include "math/m_translate.h"
 
 
 void
@@ -82,6 +79,9 @@ _mesa_VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
    ctx->Array.Vertex.Type = type;
    ctx->Array.Vertex.Stride = stride;
    ctx->Array.Vertex.Ptr = (void *) ptr;
+#if FEATURE_ARB_vertex_buffer_object
+   ctx->Array.Vertex.BufferObj = ctx->Array.ArrayBufferObj;
+#endif
    ctx->NewState |= _NEW_ARRAY;
    ctx->Array.NewState |= _NEW_ARRAY_VERTEX;
 
@@ -90,8 +90,6 @@ _mesa_VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
 }
 
 
-
-
 void
 _mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr )
 {
@@ -134,6 +132,9 @@ _mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr )
    ctx->Array.Normal.Type = type;
    ctx->Array.Normal.Stride = stride;
    ctx->Array.Normal.Ptr = (void *) ptr;
+#if FEATURE_ARB_vertex_buffer_object
+   ctx->Array.Normal.BufferObj = ctx->Array.ArrayBufferObj;
+#endif
    ctx->NewState |= _NEW_ARRAY;
    ctx->Array.NewState |= _NEW_ARRAY_NORMAL;
 
@@ -142,7 +143,6 @@ _mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr )
 }
 
 
-
 void
 _mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
 {
@@ -199,6 +199,9 @@ _mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
    ctx->Array.Color.Type = type;
    ctx->Array.Color.Stride = stride;
    ctx->Array.Color.Ptr = (void *) ptr;
+#if FEATURE_ARB_vertex_buffer_object
+   ctx->Array.Color.BufferObj = ctx->Array.ArrayBufferObj;
+#endif
    ctx->NewState |= _NEW_ARRAY;
    ctx->Array.NewState |= _NEW_ARRAY_COLOR0;
 
@@ -207,7 +210,6 @@ _mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
 }
 
 
-
 void
 _mesa_FogCoordPointerEXT(GLenum type, GLsizei stride, const GLvoid *ptr)
 {
@@ -238,6 +240,9 @@ _mesa_FogCoordPointerEXT(GLenum type, GLsizei stride, const GLvoid *ptr)
    ctx->Array.FogCoord.Type = type;
    ctx->Array.FogCoord.Stride = stride;
    ctx->Array.FogCoord.Ptr = (void *) ptr;
+#if FEATURE_ARB_vertex_buffer_object
+   ctx->Array.FogCoord.BufferObj = ctx->Array.ArrayBufferObj;
+#endif
    ctx->NewState |= _NEW_ARRAY;
    ctx->Array.NewState |= _NEW_ARRAY_FOGCOORD;
 
@@ -285,6 +290,9 @@ _mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr)
    ctx->Array.Index.Type = type;
    ctx->Array.Index.Stride = stride;
    ctx->Array.Index.Ptr = (void *) ptr;
+#if FEATURE_ARB_vertex_buffer_object
+   ctx->Array.Index.BufferObj = ctx->Array.ArrayBufferObj;
+#endif
    ctx->NewState |= _NEW_ARRAY;
    ctx->Array.NewState |= _NEW_ARRAY_INDEX;
 
@@ -350,6 +358,9 @@ _mesa_SecondaryColorPointerEXT(GLint size, GLenum type,
    ctx->Array.SecondaryColor.Type = type;
    ctx->Array.SecondaryColor.Stride = stride;
    ctx->Array.SecondaryColor.Ptr = (void *) ptr;
+#if FEATURE_ARB_vertex_buffer_object
+   ctx->Array.SecondaryColor.BufferObj = ctx->Array.ArrayBufferObj;
+#endif
    ctx->NewState |= _NEW_ARRAY;
    ctx->Array.NewState |= _NEW_ARRAY_COLOR1;
 
@@ -358,7 +369,6 @@ _mesa_SecondaryColorPointerEXT(GLint size, GLenum type,
 }
 
 
-
 void
 _mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride,
                       const GLvoid *ptr)
@@ -406,6 +416,9 @@ _mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride,
    ctx->Array.TexCoord[texUnit].Type = type;
    ctx->Array.TexCoord[texUnit].Stride = stride;
    ctx->Array.TexCoord[texUnit].Ptr = (void *) ptr;
+#if FEATURE_ARB_vertex_buffer_object
+   ctx->Array.TexCoord[texUnit].BufferObj = ctx->Array.ArrayBufferObj;
+#endif
    ctx->NewState |= _NEW_ARRAY;
    ctx->Array.NewState |= _NEW_ARRAY_TEXCOORD(texUnit);
 
@@ -428,6 +441,9 @@ _mesa_EdgeFlagPointer(GLsizei stride, const GLvoid *vptr)
    ctx->Array.EdgeFlag.Stride = stride;
    ctx->Array.EdgeFlag.StrideB = stride ? stride : sizeof(GLboolean);
    ctx->Array.EdgeFlag.Ptr = (GLboolean *) ptr;
+#if FEATURE_ARB_vertex_buffer_object
+   ctx->Array.EdgeFlag.BufferObj = ctx->Array.ArrayBufferObj;
+#endif
    ctx->NewState |= _NEW_ARRAY;
    ctx->Array.NewState |= _NEW_ARRAY_EDGEFLAG;
 
@@ -436,6 +452,7 @@ _mesa_EdgeFlagPointer(GLsizei stride, const GLvoid *vptr)
 }
 
 
+#if FEATURE_NV_vertex_program
 void
 _mesa_VertexAttribPointerNV(GLuint index, GLint size, GLenum type,
                             GLsizei stride, const GLvoid *ptr)
@@ -489,15 +506,19 @@ _mesa_VertexAttribPointerNV(GLuint index, GLint size, GLenum type,
    ctx->Array.VertexAttrib[index].Size = size;
    ctx->Array.VertexAttrib[index].Type = type;
    ctx->Array.VertexAttrib[index].Ptr = (void *) ptr;
-
+#if FEATURE_ARB_vertex_buffer_object
+   ctx->Array.VertexAttrib[index].BufferObj = ctx->Array.ArrayBufferObj;
+#endif
    ctx->NewState |= _NEW_ARRAY;
    ctx->Array.NewState |= _NEW_ARRAY_ATTRIB(index);
 
    if (ctx->Driver.VertexAttribPointer)
       ctx->Driver.VertexAttribPointer( ctx, index, size, type, stride, ptr );
 }
+#endif
 
 
+#if FEATURE_ARB_vertex_program
 void
 _mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type,
                              GLboolean normalized,
@@ -566,7 +587,9 @@ _mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type,
    ctx->Array.VertexAttrib[index].Type = type;
    ctx->Array.VertexAttrib[index].Normalized = normalized;
    ctx->Array.VertexAttrib[index].Ptr = (void *) ptr;
-
+#if FEATURE_ARB_vertex_buffer_object
+   ctx->Array.VertexAttrib[index].BufferObj = ctx->Array.ArrayBufferObj;
+#endif
    ctx->NewState |= _NEW_ARRAY;
    ctx->Array.NewState |= _NEW_ARRAY_ATTRIB(index);
 
@@ -575,7 +598,7 @@ _mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type,
       ctx->Driver.VertexAttribPointer( ctx, index, size, type, stride, ptr );
    */
 }
-
+#endif
 
 
 void
@@ -631,8 +654,6 @@ _mesa_EdgeFlagPointerEXT(GLsizei stride, GLsizei count, const GLboolean *ptr)
 }
 
 
-
-
 void
 _mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer)
 {
@@ -828,7 +849,6 @@ _mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer)
 }
 
 
-
 void
 _mesa_LockArraysEXT(GLint first, GLsizei count)
 {
@@ -875,7 +895,6 @@ _mesa_UnlockArraysEXT( void )
 }
 
 
-
 /* GL_EXT_multi_draw_arrays */
 /* Somebody forgot to spec the first and count parameters as const! <sigh> */
 void
@@ -957,9 +976,10 @@ _mesa_MultiModeDrawElementsIBM( const GLenum * mode, const GLsizei * count,
 /*****                      Initialization                        *****/
 /**********************************************************************/
 
-void _mesa_init_varray( GLcontext * ctx )
+void
+_mesa_init_varray( GLcontext * ctx )
 {
-   int i;
+   GLuint i;
 
    /* Vertex arrays */
    ctx->Array.Vertex.Size = 4;
@@ -1018,4 +1038,13 @@ void _mesa_init_varray( GLcontext * ctx )
    ctx->Array.EdgeFlag.Enabled = GL_FALSE;
    ctx->Array.EdgeFlag.Flags = CA_CLIENT_DATA;
    ctx->Array.ActiveTexture = 0;   /* GL_ARB_multitexture */
+   for (i = 0; i < VERT_ATTRIB_MAX; i++) {
+      ctx->Array.TexCoord[i].Size = 4;
+      ctx->Array.TexCoord[i].Type = GL_FLOAT;
+      ctx->Array.TexCoord[i].Stride = 0;
+      ctx->Array.TexCoord[i].StrideB = 0;
+      ctx->Array.TexCoord[i].Ptr = NULL;
+      ctx->Array.TexCoord[i].Enabled = GL_FALSE;
+      ctx->Array.TexCoord[i].Flags = CA_CLIENT_DATA;
+   }
 }
index f1d6ee8925fdaa236ef8a06fc4579bfb2f0d55ef..85f63dd8fbc8b71aebc13c7a454e1ebe9494e39e 100644 (file)
@@ -298,7 +298,7 @@ static void _tnl_vb_bind_immediate( GLcontext *ctx, struct immediate *IM )
    }
 
    if (inputs & VERT_BIT_COLOR1) {
-      tmp->SecondaryColor.Ptr = IM->Attrib[VERT_ATTRIB_COLOR1] + start;
+      tmp->SecondaryColor.Ptr = (GLubyte *) (IM->Attrib[VERT_ATTRIB_COLOR1] + start);
       VB->SecondaryColorPtr[0] = &tmp->SecondaryColor;
    }
 
@@ -308,12 +308,12 @@ static void _tnl_vb_bind_immediate( GLcontext *ctx, struct immediate *IM )
 
    if (inputs & VERT_BIT_COLOR0) {
       if (IM->CopyOrFlag & VERT_BIT_COLOR0) {
-        tmp->Color.Ptr = IM->Attrib[VERT_ATTRIB_COLOR0] + start;
+        tmp->Color.Ptr = (GLubyte *) (IM->Attrib[VERT_ATTRIB_COLOR0] + start);
         tmp->Color.StrideB = 4 * sizeof(GLfloat);
         tmp->Color.Flags = 0;
       }
       else {
-        tmp->Color.Ptr = ctx->Current.Attrib[VERT_ATTRIB_COLOR0];
+        tmp->Color.Ptr = (GLubyte *) ctx->Current.Attrib[VERT_ATTRIB_COLOR0];
         tmp->Color.StrideB = 0;
         tmp->Color.Flags = CA_CLIENT_DATA; /* hack */
         VB->import_source = IM;
index 452c00620f42efa714290c52f2df49dc56be12be..7fac7ec893b2ad02453f85c2d8fcd5245cb1bc77 100644 (file)
@@ -287,7 +287,7 @@ static GLboolean run_validate_program( GLcontext *ctx,
  */
 static void init_color_array( struct gl_client_array *a, GLvector4f *vec )
 {
-   a->Ptr = vec->data;
+   a->Ptr = (GLubyte *) vec->data;
    a->Size = 4;
    a->Type = GL_FLOAT;
    a->Stride = 0;