Kaynağa Gözat

More work on ARB_vertex_buffer_object.

Use GLubyte * instead of void * for gl_client_array->Ptr to simplify upcoming
pointer arithmetic changes.
tags/vtx-0-2-21112003-freeze
Brian Paul 22 yıl önce
ebeveyn
işleme
148a2847a1

+ 51
- 1
src/mesa/array_cache/ac_context.c Dosyayı Görüntüle

@@ -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
}
}


+ 1
- 1
src/mesa/array_cache/ac_import.c Dosyayı Görüntüle

@@ -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)

+ 1
- 1
src/mesa/main/arbprogram.c Dosyayı Görüntüle

@@ -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;

+ 88
- 47
src/mesa/main/bufferobj.c Dosyayı Görüntüle

@@ -37,20 +37,6 @@
#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;
}

+ 9
- 0
src/mesa/main/bufferobj.h Dosyayı Görüntüle

@@ -29,10 +29,16 @@
#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 );

+ 2
- 0
src/mesa/main/context.c Dosyayı Görüntüle

@@ -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 );

+ 40
- 40
src/mesa/main/get.c Dosyayı Görüntüle

@@ -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


+ 29
- 21
src/mesa/main/mtypes.h Dosyayı Görüntüle

@@ -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.
*

+ 1
- 1
src/mesa/main/nvprogram.c Dosyayı Görüntüle

@@ -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");

+ 47
- 18
src/mesa/main/varray.c Dosyayı Görüntüle

@@ -24,17 +24,14 @@


#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;
}
}

+ 3
- 3
src/mesa/tnl/t_imm_exec.c Dosyayı Görüntüle

@@ -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;

+ 1
- 1
src/mesa/tnl/t_vb_program.c Dosyayı Görüntüle

@@ -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;

Loading…
İptal
Kaydet