Author: jgardou Date: Tue Jun 17 09:02:19 2014 New Revision: 63608
URL: http://svn.reactos.org/svn/reactos?rev=63608&view=rev Log: [OPENGL32/MESA] - Get rid of APPLE_vertex_array_object, ARB_vertex_array_object and APPLE_object_purgeable CORE-7499
Removed: trunk/reactos/dll/opengl/mesa/main/arrayobj.c trunk/reactos/dll/opengl/mesa/main/arrayobj.h Modified: trunk/reactos/dll/opengl/mesa/drivers/common/driverfuncs.c trunk/reactos/dll/opengl/mesa/drivers/common/meta.c trunk/reactos/dll/opengl/mesa/drivers/common/meta.h trunk/reactos/dll/opengl/mesa/main/CMakeLists.txt trunk/reactos/dll/opengl/mesa/main/api_arrayelt.c trunk/reactos/dll/opengl/mesa/main/api_exec.c trunk/reactos/dll/opengl/mesa/main/api_validate.c trunk/reactos/dll/opengl/mesa/main/attrib.c trunk/reactos/dll/opengl/mesa/main/bufferobj.c trunk/reactos/dll/opengl/mesa/main/context.c trunk/reactos/dll/opengl/mesa/main/dd.h trunk/reactos/dll/opengl/mesa/main/dispatch.h trunk/reactos/dll/opengl/mesa/main/dlist.c trunk/reactos/dll/opengl/mesa/main/enable.c trunk/reactos/dll/opengl/mesa/main/extensions.c trunk/reactos/dll/opengl/mesa/main/get.c trunk/reactos/dll/opengl/mesa/main/getstring.c trunk/reactos/dll/opengl/mesa/main/mtypes.h trunk/reactos/dll/opengl/mesa/main/precomp.h trunk/reactos/dll/opengl/mesa/main/state.c trunk/reactos/dll/opengl/mesa/main/varray.c trunk/reactos/dll/opengl/mesa/main/varray.h trunk/reactos/dll/opengl/mesa/main/version.c trunk/reactos/dll/opengl/mesa/vbo/vbo_exec_array.c trunk/reactos/dll/opengl/mesa/vbo/vbo_save_api.c
Modified: trunk/reactos/dll/opengl/mesa/drivers/common/driverfuncs.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/drivers/com... ============================================================================== --- trunk/reactos/dll/opengl/mesa/drivers/common/driverfuncs.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/drivers/common/driverfuncs.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -26,7 +26,6 @@ #include "main/glheader.h" #include "main/imports.h" #include "main/accum.h" -#include "main/arrayobj.h" #include "main/context.h" #include "main/framebuffer.h" #include "main/readpix.h" @@ -147,11 +146,6 @@
_mesa_init_texture_barrier_functions(driver);
- /* APPLE_vertex_array_object */ - driver->NewArrayObject = _mesa_new_array_object; - driver->DeleteArrayObject = _mesa_delete_array_object; - driver->BindArrayObject = NULL; - /* T&L stuff */ driver->CurrentExecPrimitive = 0; driver->CurrentSavePrimitive = 0;
Modified: trunk/reactos/dll/opengl/mesa/drivers/common/meta.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/drivers/com... ============================================================================== --- trunk/reactos/dll/opengl/mesa/drivers/common/meta.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/drivers/common/meta.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -34,7 +34,6 @@ #include "main/glheader.h" #include "main/mtypes.h" #include "main/imports.h" -#include "main/arrayobj.h" #include "main/blend.h" #include "main/bufferobj.h" #include "main/buffers.h" @@ -134,10 +133,6 @@ GLbitfield TexGenEnabled; GLuint EnvMode; /* unit[0] only */
- /** MESA_META_VERTEX */ - struct gl_array_object *ArrayObj; - struct gl_buffer_object *ArrayBufferObj; - /** MESA_META_VIEWPORT */ GLint ViewportX, ViewportY, ViewportW, ViewportH; GLclampd DepthNear, DepthFar; @@ -406,15 +401,6 @@ } }
- if (state & MESA_META_VERTEX) { - /* save vertex array object state */ - _mesa_reference_array_object(ctx, &save->ArrayObj, - ctx->Array.ArrayObj); - _mesa_reference_buffer_object(ctx, &save->ArrayBufferObj, - ctx->Array.ArrayBufferObj); - /* set some default state? */ - } - if (state & MESA_META_VIEWPORT) { /* save viewport state */ save->ViewportX = ctx->Viewport.X; @@ -596,16 +582,6 @@ } } } - } - - if (state & MESA_META_VERTEX) { - /* restore vertex buffer object */ - _mesa_BindBufferARB(GL_ARRAY_BUFFER_ARB, save->ArrayBufferObj->Name); - _mesa_reference_buffer_object(ctx, &save->ArrayBufferObj, NULL); - - /* restore vertex array object */ - _mesa_BindVertexArray(save->ArrayObj->Name); - _mesa_reference_array_object(ctx, &save->ArrayObj, NULL); }
if (state & MESA_META_VIEWPORT) {
Modified: trunk/reactos/dll/opengl/mesa/drivers/common/meta.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/drivers/com... ============================================================================== --- trunk/reactos/dll/opengl/mesa/drivers/common/meta.h [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/drivers/common/meta.h [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -47,7 +47,6 @@ #define MESA_META_STENCIL_TEST 0x400 #define MESA_META_TRANSFORM 0x800 /**< modelview/projection matrix state */ #define MESA_META_TEXTURE 0x1000 -#define MESA_META_VERTEX 0x2000 #define MESA_META_VIEWPORT 0x4000 #define MESA_META_CLIP 0x8000 #define MESA_META_SELECT_FEEDBACK 0x10000
Modified: trunk/reactos/dll/opengl/mesa/main/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/CMakeL... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/CMakeLists.txt [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -6,7 +6,6 @@ api_validate.c accum.c attrib.c - arrayobj.c blend.c bufferobj.c buffers.c
Modified: trunk/reactos/dll/opengl/mesa/main/api_arrayelt.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/api_ar... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/api_arrayelt.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/api_arrayelt.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -734,49 +734,48 @@ AEcontext *actx = AE_CONTEXT(ctx); AEarray *aa = actx->arrays; AEattrib *at = actx->attribs; - struct gl_array_object *arrayObj = ctx->Array.ArrayObj;
actx->nr_vbos = 0;
/* conventional vertex arrays */ - if (arrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled) { - aa->array = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX]; + if (ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled) { + aa->array = &ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR_INDEX]; aa->offset = IndexFuncs[TYPE_IDX(aa->array->Type)]; check_vbo(actx, aa->array->BufferObj); aa++; } - if (arrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled) { - aa->array = &arrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG]; + if (ctx->Array.VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled) { + aa->array = &ctx->Array.VertexAttrib[VERT_ATTRIB_EDGEFLAG]; aa->offset = _gloffset_EdgeFlagv; check_vbo(actx, aa->array->BufferObj); aa++; } - if (arrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled) { - aa->array = &arrayObj->VertexAttrib[VERT_ATTRIB_NORMAL]; + if (ctx->Array.VertexAttrib[VERT_ATTRIB_NORMAL].Enabled) { + aa->array = &ctx->Array.VertexAttrib[VERT_ATTRIB_NORMAL]; aa->offset = NormalFuncs[TYPE_IDX(aa->array->Type)]; check_vbo(actx, aa->array->BufferObj); aa++; } - if (arrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled) { - aa->array = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR0]; + if (ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR0].Enabled) { + aa->array = &ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR0]; aa->offset = ColorFuncs[aa->array->Size-3][TYPE_IDX(aa->array->Type)]; check_vbo(actx, aa->array->BufferObj); aa++; } - if (arrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled) { - aa->array = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR1]; + if (ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR1].Enabled) { + aa->array = &ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR1]; aa->offset = SecondaryColorFuncs[TYPE_IDX(aa->array->Type)]; check_vbo(actx, aa->array->BufferObj); aa++; } - if (arrayObj->VertexAttrib[VERT_ATTRIB_FOG].Enabled) { - aa->array = &arrayObj->VertexAttrib[VERT_ATTRIB_FOG]; + if (ctx->Array.VertexAttrib[VERT_ATTRIB_FOG].Enabled) { + aa->array = &ctx->Array.VertexAttrib[VERT_ATTRIB_FOG]; aa->offset = FogCoordFuncs[TYPE_IDX(aa->array->Type)]; check_vbo(actx, aa->array->BufferObj); aa++; } { - struct gl_client_array *attribArray = &arrayObj->VertexAttrib[VERT_ATTRIB_TEX]; + struct gl_client_array *attribArray = &ctx->Array.VertexAttrib[VERT_ATTRIB_TEX]; if (attribArray->Enabled) { /* NOTE: we use generic glVertexAttribNV functions here. * If we ever remove GL_NV_vertex_program this will have to change. @@ -793,14 +792,14 @@ }
/* finally, vertex position */ - if (arrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled) { - aa->array = &arrayObj->VertexAttrib[VERT_ATTRIB_POS]; + if (ctx->Array.VertexAttrib[VERT_ATTRIB_POS].Enabled) { + aa->array = &ctx->Array.VertexAttrib[VERT_ATTRIB_POS]; aa->offset = VertexFuncs[aa->array->Size-2][TYPE_IDX(aa->array->Type)]; check_vbo(actx, aa->array->BufferObj); aa++; }
- check_vbo(actx, arrayObj->ElementArrayBufferObj); + check_vbo(actx, ctx->Array.ElementArrayBufferObj);
ASSERT(at - actx->attribs <= VERT_ATTRIB_MAX); ASSERT(aa - actx->arrays < 32);
Modified: trunk/reactos/dll/opengl/mesa/main/api_exec.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/api_ex... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/api_exec.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/api_exec.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -308,12 +308,6 @@ /* glVertexAttrib*NV functions handled in api_loopback.c */ #endif
- /* 273. GL_APPLE_vertex_array_object */ - SET_BindVertexArrayAPPLE(exec, _mesa_BindVertexArrayAPPLE); - SET_DeleteVertexArraysAPPLE(exec, _mesa_DeleteVertexArraysAPPLE); - SET_GenVertexArraysAPPLE(exec, _mesa_GenVertexArraysAPPLE); - SET_IsVertexArrayAPPLE(exec, _mesa_IsVertexArrayAPPLE); - /* 282. GL_NV_fragment_program */ #if FEATURE_NV_fragment_program SET_ProgramNamedParameter4fNV(exec, _mesa_ProgramNamedParameter4fNV); @@ -367,16 +361,6 @@ SET_FlushMappedBufferRange(exec, _mesa_FlushMappedBufferRange); #endif
- /* GL_ARB_vertex_array_object */ - SET_BindVertexArray(exec, _mesa_BindVertexArray); - SET_GenVertexArrays(exec, _mesa_GenVertexArrays); - -#if FEATURE_APPLE_object_purgeable - SET_ObjectPurgeableAPPLE(exec, _mesa_ObjectPurgeableAPPLE); - SET_ObjectUnpurgeableAPPLE(exec, _mesa_ObjectUnpurgeableAPPLE); - SET_GetObjectParameterivAPPLE(exec, _mesa_GetObjectParameterivAPPLE); -#endif - /* GL_EXT_texture_integer */ SET_ClearColorIiEXT(exec, _mesa_ClearColorIiEXT); SET_ClearColorIuiEXT(exec, _mesa_ClearColorIuiEXT);
Modified: trunk/reactos/dll/opengl/mesa/main/api_validate.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/api_va... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/api_validate.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/api_validate.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -101,7 +101,7 @@ /* Draw if we have vertex positions (GL_VERTEX_ARRAY or generic * array [0]). */ - return ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled; + return ctx->Array.VertexAttrib[VERT_ATTRIB_POS].Enabled; }
@@ -130,14 +130,14 @@ memset(&ib, 0, sizeof(ib)); ib.type = type; ib.ptr = indices; - ib.obj = ctx->Array.ArrayObj->ElementArrayBufferObj; + ib.obj = ctx->Array.ElementArrayBufferObj;
vbo_get_minmax_index(ctx, &prim, &ib, &min, &max);
- if (max >= ctx->Array.ArrayObj->_MaxElement) { + if (max >= ctx->Array._MaxElement) { /* the max element is out of bounds of one or more enabled arrays */ _mesa_warning(ctx, "glDrawElements() index=%u is out of bounds (max=%u)", - max, ctx->Array.ArrayObj->_MaxElement); + max, ctx->Array._MaxElement); return GL_FALSE; }
@@ -197,10 +197,10 @@ return GL_FALSE;
/* Vertex buffer object tests */ - if (_mesa_is_bufferobj(ctx->Array.ArrayObj->ElementArrayBufferObj)) { + if (_mesa_is_bufferobj(ctx->Array.ElementArrayBufferObj)) { /* use indices in the buffer object */ /* make sure count doesn't go outside buffer bounds */ - if (index_bytes(type, count) > ctx->Array.ArrayObj->ElementArrayBufferObj->Size) { + if (index_bytes(type, count) > ctx->Array.ElementArrayBufferObj->Size) { _mesa_warning(ctx, "glDrawElements index out of buffer bounds"); return GL_FALSE; } @@ -258,10 +258,10 @@ return GL_FALSE;
/* Vertex buffer object tests */ - if (_mesa_is_bufferobj(ctx->Array.ArrayObj->ElementArrayBufferObj)) { + if (_mesa_is_bufferobj(ctx->Array.ElementArrayBufferObj)) { /* use indices in the buffer object */ /* make sure count doesn't go outside buffer bounds */ - if (index_bytes(type, count) > ctx->Array.ArrayObj->ElementArrayBufferObj->Size) { + if (index_bytes(type, count) > ctx->Array.ElementArrayBufferObj->Size) { _mesa_warning(ctx, "glDrawRangeElements index out of buffer bounds"); return GL_FALSE; } @@ -305,7 +305,7 @@ return GL_FALSE;
if (ctx->Const.CheckArrayBounds) { - if (start + count > (GLint) ctx->Array.ArrayObj->_MaxElement) + if (start + count > (GLint) ctx->Array._MaxElement) return GL_FALSE; }
Removed: trunk/reactos/dll/opengl/mesa/main/arrayobj.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/arrayo... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/arrayobj.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/arrayobj.c (removed) @@ -1,533 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 7.6 - * - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * (C) Copyright IBM Corporation 2006 - * Copyright (C) 2009 VMware, Inc. 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"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * BRIAN PAUL OR IBM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN 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. - */ - - -/** - * \file arrayobj.c - * Functions for the GL_APPLE_vertex_array_object extension. - * - * \todo - * The code in this file borrows a lot from bufferobj.c. There's a certain - * amount of cruft left over from that origin that may be unnecessary. - * - * \author Ian Romanick idr@us.ibm.com - * \author Brian Paul - */ - -#include <precomp.h> - -/** - * Look up the array object for the given ID. - * - * \returns - * Either a pointer to the array object with the specified ID or \c NULL for - * a non-existent ID. The spec defines ID 0 as being technically - * non-existent. - */ - -static inline struct gl_array_object * -lookup_arrayobj(struct gl_context *ctx, GLuint id) -{ - if (id == 0) - return NULL; - else - return (struct gl_array_object *) - _mesa_HashLookup(ctx->Array.Objects, id); -} - - -/** - * For all the vertex arrays in the array object, unbind any pointers - * to any buffer objects (VBOs). - * This is done just prior to array object destruction. - */ -static void -unbind_array_object_vbos(struct gl_context *ctx, struct gl_array_object *obj) -{ - GLuint i; - - for (i = 0; i < Elements(obj->VertexAttrib); i++) - _mesa_reference_buffer_object(ctx, &obj->VertexAttrib[i].BufferObj, NULL); -} - - -/** - * Allocate and initialize a new vertex array object. - * - * This function is intended to be called via - * \c dd_function_table::NewArrayObject. - */ -struct gl_array_object * -_mesa_new_array_object( struct gl_context *ctx, GLuint name ) -{ - struct gl_array_object *obj = CALLOC_STRUCT(gl_array_object); - if (obj) - _mesa_initialize_array_object(ctx, obj, name); - return obj; -} - - -/** - * Delete an array object. - * - * This function is intended to be called via - * \c dd_function_table::DeleteArrayObject. - */ -void -_mesa_delete_array_object( struct gl_context *ctx, struct gl_array_object *obj ) -{ - (void) ctx; - unbind_array_object_vbos(ctx, obj); - _mesa_reference_buffer_object(ctx, &obj->ElementArrayBufferObj, NULL); - _glthread_DESTROY_MUTEX(obj->Mutex); - free(obj); -} - - -/** - * Set ptr to arrayObj w/ reference counting. - */ -void -_mesa_reference_array_object(struct gl_context *ctx, - struct gl_array_object **ptr, - struct gl_array_object *arrayObj) -{ - if (*ptr == arrayObj) - return; - - if (*ptr) { - /* Unreference the old array object */ - GLboolean deleteFlag = GL_FALSE; - struct gl_array_object *oldObj = *ptr; - - _glthread_LOCK_MUTEX(oldObj->Mutex); - ASSERT(oldObj->RefCount > 0); - oldObj->RefCount--; -#if 0 - printf("ArrayObj %p %d DECR to %d\n", - (void *) oldObj, oldObj->Name, oldObj->RefCount); -#endif - deleteFlag = (oldObj->RefCount == 0); - _glthread_UNLOCK_MUTEX(oldObj->Mutex); - - if (deleteFlag) { - ASSERT(ctx->Driver.DeleteArrayObject); - ctx->Driver.DeleteArrayObject(ctx, oldObj); - } - - *ptr = NULL; - } - ASSERT(!*ptr); - - if (arrayObj) { - /* reference new array object */ - _glthread_LOCK_MUTEX(arrayObj->Mutex); - if (arrayObj->RefCount == 0) { - /* this array's being deleted (look just above) */ - /* Not sure this can every really happen. Warn if it does. */ - _mesa_problem(NULL, "referencing deleted array object"); - *ptr = NULL; - } - else { - arrayObj->RefCount++; -#if 0 - printf("ArrayObj %p %d INCR to %d\n", - (void *) arrayObj, arrayObj->Name, arrayObj->RefCount); -#endif - *ptr = arrayObj; - } - _glthread_UNLOCK_MUTEX(arrayObj->Mutex); - } -} - - - -static void -init_array(struct gl_context *ctx, - struct gl_client_array *array, GLint size, GLint type) -{ - array->Size = size; - array->Type = type; - array->Stride = 0; - array->StrideB = 0; - array->Ptr = NULL; - array->Enabled = GL_FALSE; - array->Normalized = GL_FALSE; - array->Integer = GL_FALSE; - array->_ElementSize = size * _mesa_sizeof_type(type); - /* Vertex array buffers */ - _mesa_reference_buffer_object(ctx, &array->BufferObj, - ctx->Shared->NullBufferObj); -} - - -/** - * Initialize a gl_array_object's arrays. - */ -void -_mesa_initialize_array_object( struct gl_context *ctx, - struct gl_array_object *obj, - GLuint name ) -{ - GLuint i; - - obj->Name = name; - - _glthread_INIT_MUTEX(obj->Mutex); - obj->RefCount = 1; - - /* Init the individual arrays */ - for (i = 0; i < Elements(obj->VertexAttrib); i++) { - switch (i) { - case VERT_ATTRIB_WEIGHT: - init_array(ctx, &obj->VertexAttrib[VERT_ATTRIB_WEIGHT], 1, GL_FLOAT); - break; - case VERT_ATTRIB_NORMAL: - init_array(ctx, &obj->VertexAttrib[VERT_ATTRIB_NORMAL], 3, GL_FLOAT); - break; - case VERT_ATTRIB_COLOR1: - init_array(ctx, &obj->VertexAttrib[VERT_ATTRIB_COLOR1], 3, GL_FLOAT); - break; - case VERT_ATTRIB_FOG: - init_array(ctx, &obj->VertexAttrib[VERT_ATTRIB_FOG], 1, GL_FLOAT); - break; - case VERT_ATTRIB_COLOR_INDEX: - init_array(ctx, &obj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX], 1, GL_FLOAT); - break; - case VERT_ATTRIB_EDGEFLAG: - init_array(ctx, &obj->VertexAttrib[VERT_ATTRIB_EDGEFLAG], 1, GL_BOOL); - break; -#if FEATURE_point_size_array - case VERT_ATTRIB_POINT_SIZE: - init_array(ctx, &obj->VertexAttrib[VERT_ATTRIB_POINT_SIZE], 1, GL_FLOAT); - break; -#endif - default: - init_array(ctx, &obj->VertexAttrib[i], 4, GL_FLOAT); - break; - } - } - - _mesa_reference_buffer_object(ctx, &obj->ElementArrayBufferObj, - ctx->Shared->NullBufferObj); -} - - -/** - * Add the given array object to the array object pool. - */ -static void -save_array_object( struct gl_context *ctx, struct gl_array_object *obj ) -{ - if (obj->Name > 0) { - /* insert into hash table */ - _mesa_HashInsert(ctx->Array.Objects, obj->Name, obj); - } -} - - -/** - * Remove the given array object from the array object pool. - * Do not deallocate the array object though. - */ -static void -remove_array_object( struct gl_context *ctx, struct gl_array_object *obj ) -{ - if (obj->Name > 0) { - /* remove from hash table */ - _mesa_HashRemove(ctx->Array.Objects, obj->Name); - } -} - - - -/** - * Helper for update_arrays(). - * \return min(current min, array->_MaxElement). - */ -static GLuint -update_min(GLuint min, struct gl_client_array *array) -{ - assert(array->Enabled); - _mesa_update_array_max_element(array); - return MIN2(min, array->_MaxElement); -} - - -/** - * Examine vertex arrays to update the gl_array_object::_MaxElement field. - */ -void -_mesa_update_array_object_max_element(struct gl_context *ctx, - struct gl_array_object *arrayObj) -{ - GLbitfield64 enabled = arrayObj->_Enabled; - GLuint min = ~0u; - - while (enabled) { - GLint attrib = _mesa_ffsll(enabled) - 1; - enabled &= ~BITFIELD64_BIT(attrib); - min = update_min(min, &arrayObj->VertexAttrib[attrib]); - } - - /* _MaxElement is one past the last legal array element */ - arrayObj->_MaxElement = min; -} - - -/**********************************************************************/ -/* API Functions */ -/**********************************************************************/ - - -/** - * Helper for _mesa_BindVertexArray() and _mesa_BindVertexArrayAPPLE(). - * \param genRequired specifies behavour when id was not generated with - * glGenVertexArrays(). - */ -static void -bind_vertex_array(struct gl_context *ctx, GLuint id, GLboolean genRequired) -{ - struct gl_array_object * const oldObj = ctx->Array.ArrayObj; - struct gl_array_object *newObj = NULL; - ASSERT_OUTSIDE_BEGIN_END(ctx); - - ASSERT(oldObj != NULL); - - if ( oldObj->Name == id ) - return; /* rebinding the same array object- no change */ - - /* - * Get pointer to new array object (newObj) - */ - if (id == 0) { - /* The spec says there is no array object named 0, but we use - * one internally because it simplifies things. - */ - newObj = ctx->Array.DefaultArrayObj; - } - else { - /* non-default array object */ - newObj = lookup_arrayobj(ctx, id); - if (!newObj) { - if (genRequired) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glBindVertexArray(id)"); - return; - } - - /* For APPLE version, generate a new array object now */ - newObj = (*ctx->Driver.NewArrayObject)(ctx, id); - if (!newObj) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBindVertexArrayAPPLE"); - return; - } - - save_array_object(ctx, newObj); - } - - if (!newObj->_Used) { - /* The "Interactions with APPLE_vertex_array_object" section of the - * GL_ARB_vertex_array_object spec says: - * - * "The first bind call, either BindVertexArray or - * BindVertexArrayAPPLE, determines the semantic of the object." - */ - newObj->ARBsemantics = genRequired; - newObj->_Used = GL_TRUE; - } - } - - ctx->NewState |= _NEW_ARRAY; - ctx->Array.NewState |= VERT_BIT_ALL; - _mesa_reference_array_object(ctx, &ctx->Array.ArrayObj, newObj); - - /* Pass BindVertexArray call to device driver */ - if (ctx->Driver.BindArrayObject && newObj) - ctx->Driver.BindArrayObject(ctx, newObj); -} - - -/** - * ARB version of glBindVertexArray() - * This function behaves differently from glBindVertexArrayAPPLE() in - * that this function requires all ids to have been previously generated - * by glGenVertexArrays[APPLE](). - */ -void GLAPIENTRY -_mesa_BindVertexArray( GLuint id ) -{ - GET_CURRENT_CONTEXT(ctx); - bind_vertex_array(ctx, id, GL_TRUE); -} - - -/** - * Bind a new array. - * - * \todo - * The binding could be done more efficiently by comparing the non-NULL - * pointers in the old and new objects. The only arrays that are "dirty" are - * the ones that are non-NULL in either object. - */ -void GLAPIENTRY -_mesa_BindVertexArrayAPPLE( GLuint id ) -{ - GET_CURRENT_CONTEXT(ctx); - bind_vertex_array(ctx, id, GL_FALSE); -} - - -/** - * Delete a set of array objects. - * - * \param n Number of array objects to delete. - * \param ids Array of \c n array object IDs. - */ -void GLAPIENTRY -_mesa_DeleteVertexArraysAPPLE(GLsizei n, const GLuint *ids) -{ - GET_CURRENT_CONTEXT(ctx); - GLsizei i; - ASSERT_OUTSIDE_BEGIN_END(ctx); - - if (n < 0) { - _mesa_error(ctx, GL_INVALID_VALUE, "glDeleteVertexArrayAPPLE(n)"); - return; - } - - for (i = 0; i < n; i++) { - struct gl_array_object *obj = lookup_arrayobj(ctx, ids[i]); - - if ( obj != NULL ) { - ASSERT( obj->Name == ids[i] ); - - /* If the array object is currently bound, the spec says "the binding - * for that object reverts to zero and the default vertex array - * becomes current." - */ - if ( obj == ctx->Array.ArrayObj ) { - CALL_BindVertexArrayAPPLE( ctx->Exec, (0) ); - } - - /* The ID is immediately freed for re-use */ - remove_array_object(ctx, obj); - - /* Unreference the array object. - * If refcount hits zero, the object will be deleted. - */ - _mesa_reference_array_object(ctx, &obj, NULL); - } - } -} - - -/** - * Generate a set of unique array object IDs and store them in \c arrays. - * Helper for _mesa_GenVertexArrays[APPLE]() functions below. - * \param n Number of IDs to generate. - * \param arrays Array of \c n locations to store the IDs. - * \param vboOnly Will arrays have to reside in VBOs? - */ -static void -gen_vertex_arrays(struct gl_context *ctx, GLsizei n, GLuint *arrays) -{ - GLuint first; - GLint i; - ASSERT_OUTSIDE_BEGIN_END(ctx); - - if (n < 0) { - _mesa_error(ctx, GL_INVALID_VALUE, "glGenVertexArraysAPPLE"); - return; - } - - if (!arrays) { - return; - } - - first = _mesa_HashFindFreeKeyBlock(ctx->Array.Objects, n); - - /* Allocate new, empty array objects and return identifiers */ - for (i = 0; i < n; i++) { - struct gl_array_object *obj; - GLuint name = first + i; - - obj = (*ctx->Driver.NewArrayObject)( ctx, name ); - if (!obj) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenVertexArraysAPPLE"); - return; - } - save_array_object(ctx, obj); - arrays[i] = first + i; - } -} - - -/** - * ARB version of glGenVertexArrays() - * All arrays will be required to live in VBOs. - */ -void GLAPIENTRY -_mesa_GenVertexArrays(GLsizei n, GLuint *arrays) -{ - GET_CURRENT_CONTEXT(ctx); - gen_vertex_arrays(ctx, n, arrays); -} - - -/** - * APPLE version of glGenVertexArraysAPPLE() - * Arrays may live in VBOs or ordinary memory. - */ -void GLAPIENTRY -_mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *arrays) -{ - GET_CURRENT_CONTEXT(ctx); - gen_vertex_arrays(ctx, n, arrays); -} - - -/** - * Determine if ID is the name of an array object. - * - * \param id ID of the potential array object. - * \return \c GL_TRUE if \c id is the name of a array object, - * \c GL_FALSE otherwise. - */ -GLboolean GLAPIENTRY -_mesa_IsVertexArrayAPPLE( GLuint id ) -{ - struct gl_array_object * obj; - GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE); - - if (id == 0) - return GL_FALSE; - - obj = lookup_arrayobj(ctx, id); - - return (obj != NULL) ? GL_TRUE : GL_FALSE; -}
Removed: trunk/reactos/dll/opengl/mesa/main/arrayobj.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/arrayo... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/arrayobj.h [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/arrayobj.h (removed) @@ -1,85 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 7.6 - * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. - * (C) Copyright IBM Corporation 2006 - * Copyright (C) 2009 VMware, Inc. 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"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * BRIAN PAUL OR IBM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN 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. - */ - -#ifndef ARRAYOBJ_H -#define ARRAYOBJ_H - -#include "glheader.h" - -struct gl_context; - -/** - * \file arrayobj.h - * Functions for the GL_APPLE_vertex_array_object extension. - * - * \author Ian Romanick idr@us.ibm.com - * \author Brian Paul - */ - -/* - * Internal functions - */ - -extern struct gl_array_object * -_mesa_new_array_object( struct gl_context *ctx, GLuint name ); - -extern void -_mesa_delete_array_object( struct gl_context *ctx, struct gl_array_object *obj ); - -extern void -_mesa_reference_array_object(struct gl_context *ctx, - struct gl_array_object **ptr, - struct gl_array_object *arrayObj); - -extern void -_mesa_initialize_array_object( struct gl_context *ctx, - struct gl_array_object *obj, GLuint name ); - - -extern void -_mesa_update_array_object_max_element(struct gl_context *ctx, - struct gl_array_object *arrayObj); - - -/* - * API functions - */ - - -void GLAPIENTRY _mesa_BindVertexArray( GLuint id ); - -void GLAPIENTRY _mesa_BindVertexArrayAPPLE( GLuint id ); - -void GLAPIENTRY _mesa_DeleteVertexArraysAPPLE(GLsizei n, const GLuint *ids); - -void GLAPIENTRY _mesa_GenVertexArrays(GLsizei n, GLuint *arrays); - -void GLAPIENTRY _mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *buffer); - -GLboolean GLAPIENTRY _mesa_IsVertexArrayAPPLE( GLuint id ); - -#endif /* ARRAYOBJ_H */
Modified: trunk/reactos/dll/opengl/mesa/main/attrib.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/attrib... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/attrib.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/attrib.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -1057,31 +1057,6 @@ #define GL_CLIENT_UNPACK_BIT (1<<21)
/** - * Copy gl_array_object from src to dest. - * 'dest' must be in an initialized state. - */ -static void -copy_array_object(struct gl_context *ctx, - struct gl_array_object *dest, - struct gl_array_object *src) -{ - GLuint i; - - /* skip Name */ - /* skip RefCount */ - - /* In theory must be the same anyway, but on recreate make sure it matches */ - dest->ARBsemantics = src->ARBsemantics; - - for (i = 0; i < Elements(src->VertexAttrib); i++) - _mesa_copy_client_array(ctx, &dest->VertexAttrib[i], &src->VertexAttrib[i]); - - /* _Enabled must be the same than on push */ - dest->_Enabled = src->_Enabled; - dest->_MaxElement = src->_MaxElement; -} - -/** * Copy gl_array_attrib from src to dest. * 'dest' must be in an initialized state. */ @@ -1098,8 +1073,20 @@ /* skip NewState */ /* skip RebindArrays */
- if (!vbo_deleted) - copy_array_object(ctx, dest->ArrayObj, src->ArrayObj); + if (!vbo_deleted) + { + GLuint i; + + /* skip Name */ + /* skip RefCount */ + + for (i = 0; i < Elements(src->VertexAttrib); i++) + _mesa_copy_client_array(ctx, &dest->VertexAttrib[i], &src->VertexAttrib[i]); + + /* _Enabled must be the same than on push */ + dest->_Enabled = src->_Enabled; + dest->_MaxElement = src->_MaxElement; + }
/* skip ArrayBufferObj */ /* skip ElementArrayBufferObj */ @@ -1113,17 +1100,14 @@ struct gl_array_attrib *dest, struct gl_array_attrib *src) { - /* Set the Name, needed for restore, but do never overwrite. - * Needs to match value in the object hash. */ - dest->ArrayObj->Name = src->ArrayObj->Name; /* And copy all of the rest. */ copy_array_attrib(ctx, dest, src, GL_FALSE);
/* Just reference them here */ _mesa_reference_buffer_object(ctx, &dest->ArrayBufferObj, src->ArrayBufferObj); - _mesa_reference_buffer_object(ctx, &dest->ArrayObj->ElementArrayBufferObj, - src->ArrayObj->ElementArrayBufferObj); + _mesa_reference_buffer_object(ctx, &dest->ElementArrayBufferObj, + src->ElementArrayBufferObj); }
/** @@ -1134,29 +1118,8 @@ struct gl_array_attrib *dest, struct gl_array_attrib *src) { - /* The ARB_vertex_array_object spec says: - * - * "BindVertexArray fails and an INVALID_OPERATION error is generated - * if array is not a name returned from a previous call to - * GenVertexArrays, or if such a name has since been deleted with - * DeleteVertexArrays." - * - * Therefore popping a deleted VAO cannot magically recreate it. - * - * The semantics of objects created using APPLE_vertex_array_objects behave - * differently. These objects expect to be recreated by pop. Alas. - */ - const GLboolean arb_vao = (src->ArrayObj->Name != 0 - && src->ArrayObj->ARBsemantics); - - if (arb_vao && !_mesa_IsVertexArrayAPPLE(src->ArrayObj->Name)) - return; - - _mesa_BindVertexArrayAPPLE(src->ArrayObj->Name); - /* Restore or recreate the buffer objects by the names ... */ - if (!arb_vao - || src->ArrayBufferObj->Name == 0 + if (!src->ArrayBufferObj->Name == 0 || _mesa_IsBufferARB(src->ArrayBufferObj->Name)) { /* ... and restore its content */ copy_array_attrib(ctx, dest, src, GL_FALSE); @@ -1167,11 +1130,10 @@ copy_array_attrib(ctx, dest, src, GL_TRUE); }
- if (!arb_vao - || src->ArrayObj->ElementArrayBufferObj->Name == 0 - || _mesa_IsBufferARB(src->ArrayObj->ElementArrayBufferObj->Name)) + if (src->ElementArrayBufferObj->Name == 0 + || _mesa_IsBufferARB(src->ElementArrayBufferObj->Name)) _mesa_BindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, - src->ArrayObj->ElementArrayBufferObj->Name); + src->ElementArrayBufferObj->Name);
/* Better safe than sorry?! */ dest->RebindArrays = GL_TRUE; @@ -1181,20 +1143,7 @@ * FIXME: of the old ArrayObj->_Enabled and the new _Enabled. * ... just do it. */ - dest->NewState |= src->ArrayObj->_Enabled | dest->ArrayObj->_Enabled; -} - -/** - * init/alloc the fields of 'attrib'. - * Needs to the init part matching free_array_attrib_data below. - */ -static void -init_array_attrib_data(struct gl_context *ctx, - struct gl_array_attrib *attrib) -{ - /* Get a non driver gl_array_object. */ - attrib->ArrayObj = CALLOC_STRUCT( gl_array_object ); - _mesa_initialize_array_object(ctx, attrib->ArrayObj, 0); + dest->NewState |= src->_Enabled | dest->_Enabled; }
/** @@ -1206,11 +1155,8 @@ free_array_attrib_data(struct gl_context *ctx, struct gl_array_attrib *attrib) { - /* We use a non driver array object, so don't just unref since we would - * end up using the drivers DeleteArrayObject function for deletion. */ - _mesa_delete_array_object(ctx, attrib->ArrayObj); - attrib->ArrayObj = 0; _mesa_reference_buffer_object(ctx, &attrib->ArrayBufferObj, NULL); + _mesa_free_varray_data(ctx, attrib); }
@@ -1247,7 +1193,7 @@ if (mask & GL_CLIENT_VERTEX_ARRAY_BIT) { struct gl_array_attrib *attr; attr = CALLOC_STRUCT( gl_array_attrib ); - init_array_attrib_data(ctx, attr); + _mesa_init_varray(ctx, attr); save_array_attrib(ctx, attr, &ctx->Array); save_attrib_data(&head, GL_CLIENT_VERTEX_ARRAY_BIT, attr); }
Modified: trunk/reactos/dll/opengl/mesa/main/bufferobj.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/buffer... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/bufferobj.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/bufferobj.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -58,7 +58,7 @@ case GL_ARRAY_BUFFER_ARB: return &ctx->Array.ArrayBufferObj; case GL_ELEMENT_ARRAY_BUFFER_ARB: - return &ctx->Array.ArrayObj->ElementArrayBufferObj; + return &ctx->Array.ElementArrayBufferObj; default: return NULL; } @@ -658,7 +658,6 @@ for (i = 0; i < n; i++) { struct gl_buffer_object *bufObj = _mesa_lookup_bufferobj(ctx, ids[i]); if (bufObj) { - struct gl_array_object *arrayObj = ctx->Array.ArrayObj; GLuint j;
ASSERT(bufObj->Name == ids[i] || bufObj == &DummyBufferObject); @@ -671,14 +670,14 @@ }
/* unbind any vertex pointers bound to this buffer */ - for (j = 0; j < Elements(arrayObj->VertexAttrib); j++) { - unbind(ctx, &arrayObj->VertexAttrib[j].BufferObj, bufObj); + for (j = 0; j < Elements(ctx->Array.VertexAttrib); j++) { + unbind(ctx, &ctx->Array.VertexAttrib[j].BufferObj, bufObj); }
if (ctx->Array.ArrayBufferObj == bufObj) { _mesa_BindBufferARB( GL_ARRAY_BUFFER_ARB, 0 ); } - if (arrayObj->ElementArrayBufferObj == bufObj) { + if (ctx->Array.ElementArrayBufferObj == bufObj) { _mesa_BindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, 0 ); }
@@ -1326,286 +1325,3 @@ ctx->Driver.FlushMappedBufferRange(ctx, offset, length, bufObj); }
- -#if FEATURE_APPLE_object_purgeable -static GLenum -buffer_object_purgeable(struct gl_context *ctx, GLuint name, GLenum option) -{ - struct gl_buffer_object *bufObj; - GLenum retval; - - bufObj = _mesa_lookup_bufferobj(ctx, name); - if (!bufObj) { - _mesa_error(ctx, GL_INVALID_VALUE, - "glObjectPurgeable(name = 0x%x)", name); - return 0; - } - if (!_mesa_is_bufferobj(bufObj)) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glObjectPurgeable(buffer 0)" ); - return 0; - } - - if (bufObj->Purgeable) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glObjectPurgeable(name = 0x%x) is already purgeable", name); - return GL_VOLATILE_APPLE; - } - - bufObj->Purgeable = GL_TRUE; - - retval = GL_VOLATILE_APPLE; - if (ctx->Driver.BufferObjectPurgeable) - retval = ctx->Driver.BufferObjectPurgeable(ctx, bufObj, option); - - return retval; -} - -static GLenum -texture_object_purgeable(struct gl_context *ctx, GLuint name, GLenum option) -{ - struct gl_texture_object *bufObj; - GLenum retval; - - bufObj = _mesa_lookup_texture(ctx, name); - if (!bufObj) { - _mesa_error(ctx, GL_INVALID_VALUE, - "glObjectPurgeable(name = 0x%x)", name); - return 0; - } - - if (bufObj->Purgeable) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glObjectPurgeable(name = 0x%x) is already purgeable", name); - return GL_VOLATILE_APPLE; - } - - bufObj->Purgeable = GL_TRUE; - - retval = GL_VOLATILE_APPLE; - if (ctx->Driver.TextureObjectPurgeable) - retval = ctx->Driver.TextureObjectPurgeable(ctx, bufObj, option); - - return retval; -} - - -GLenum GLAPIENTRY -_mesa_ObjectPurgeableAPPLE(GLenum objectType, GLuint name, GLenum option) -{ - GLenum retval; - - GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0); - - if (name == 0) { - _mesa_error(ctx, GL_INVALID_VALUE, - "glObjectPurgeable(name = 0x%x)", name); - return 0; - } - - switch (option) { - case GL_VOLATILE_APPLE: - case GL_RELEASED_APPLE: - /* legal */ - break; - default: - _mesa_error(ctx, GL_INVALID_ENUM, - "glObjectPurgeable(name = 0x%x) invalid option: %d", - name, option); - return 0; - } - - switch (objectType) { - case GL_TEXTURE: - retval = texture_object_purgeable(ctx, name, option); - break; - case GL_BUFFER_OBJECT_APPLE: - retval = buffer_object_purgeable(ctx, name, option); - break; - default: - _mesa_error(ctx, GL_INVALID_ENUM, - "glObjectPurgeable(name = 0x%x) invalid type: %d", - name, objectType); - return 0; - } - - /* In strict conformance to the spec, we must only return VOLATILE when - * when passed the VOLATILE option. Madness. - * - * XXX First fix the spec, then fix me. - */ - return option == GL_VOLATILE_APPLE ? GL_VOLATILE_APPLE : retval; -} - - -static GLenum -buffer_object_unpurgeable(struct gl_context *ctx, GLuint name, GLenum option) -{ - struct gl_buffer_object *bufObj; - GLenum retval; - - bufObj = _mesa_lookup_bufferobj(ctx, name); - if (!bufObj) { - _mesa_error(ctx, GL_INVALID_VALUE, - "glObjectUnpurgeable(name = 0x%x)", name); - return 0; - } - - if (! bufObj->Purgeable) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glObjectUnpurgeable(name = 0x%x) object is " - " already "unpurged"", name); - return 0; - } - - bufObj->Purgeable = GL_FALSE; - - retval = option; - if (ctx->Driver.BufferObjectUnpurgeable) - retval = ctx->Driver.BufferObjectUnpurgeable(ctx, bufObj, option); - - return retval; -} - -static GLenum -texture_object_unpurgeable(struct gl_context *ctx, GLuint name, GLenum option) -{ - struct gl_texture_object *bufObj; - GLenum retval; - - bufObj = _mesa_lookup_texture(ctx, name); - if (!bufObj) { - _mesa_error(ctx, GL_INVALID_VALUE, - "glObjectUnpurgeable(name = 0x%x)", name); - return 0; - } - - if (! bufObj->Purgeable) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glObjectUnpurgeable(name = 0x%x) object is" - " already "unpurged"", name); - return 0; - } - - bufObj->Purgeable = GL_FALSE; - - retval = option; - if (ctx->Driver.TextureObjectUnpurgeable) - retval = ctx->Driver.TextureObjectUnpurgeable(ctx, bufObj, option); - - return retval; -} - - -GLenum GLAPIENTRY -_mesa_ObjectUnpurgeableAPPLE(GLenum objectType, GLuint name, GLenum option) -{ - GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0); - - if (name == 0) { - _mesa_error(ctx, GL_INVALID_VALUE, - "glObjectUnpurgeable(name = 0x%x)", name); - return 0; - } - - switch (option) { - case GL_RETAINED_APPLE: - case GL_UNDEFINED_APPLE: - /* legal */ - break; - default: - _mesa_error(ctx, GL_INVALID_ENUM, - "glObjectUnpurgeable(name = 0x%x) invalid option: %d", - name, option); - return 0; - } - - switch (objectType) { - case GL_BUFFER_OBJECT_APPLE: - return buffer_object_unpurgeable(ctx, name, option); - case GL_TEXTURE: - return texture_object_unpurgeable(ctx, name, option); - default: - _mesa_error(ctx, GL_INVALID_ENUM, - "glObjectUnpurgeable(name = 0x%x) invalid type: %d", - name, objectType); - return 0; - } -} - - -static void -get_buffer_object_parameteriv(struct gl_context *ctx, GLuint name, - GLenum pname, GLint *params) -{ - struct gl_buffer_object *bufObj = _mesa_lookup_bufferobj(ctx, name); - if (!bufObj) { - _mesa_error(ctx, GL_INVALID_VALUE, - "glGetObjectParameteriv(name = 0x%x) invalid object", name); - return; - } - - switch (pname) { - case GL_PURGEABLE_APPLE: - *params = bufObj->Purgeable; - break; - default: - _mesa_error(ctx, GL_INVALID_ENUM, - "glGetObjectParameteriv(name = 0x%x) invalid enum: %d", - name, pname); - break; - } -} - -static void -get_texture_object_parameteriv(struct gl_context *ctx, GLuint name, - GLenum pname, GLint *params) -{ - struct gl_texture_object *texObj = _mesa_lookup_texture(ctx, name); - if (!texObj) { - _mesa_error(ctx, GL_INVALID_VALUE, - "glObjectUnpurgeable(name = 0x%x)", name); - return; - } - - switch (pname) { - case GL_PURGEABLE_APPLE: - *params = texObj->Purgeable; - break; - default: - _mesa_error(ctx, GL_INVALID_ENUM, - "glGetObjectParameteriv(name = 0x%x) invalid enum: %d", - name, pname); - break; - } -} - - -void GLAPIENTRY -_mesa_GetObjectParameterivAPPLE(GLenum objectType, GLuint name, GLenum pname, - GLint *params) -{ - GET_CURRENT_CONTEXT(ctx); - - if (name == 0) { - _mesa_error(ctx, GL_INVALID_VALUE, - "glGetObjectParameteriv(name = 0x%x)", name); - return; - } - - switch (objectType) { - case GL_TEXTURE: - get_texture_object_parameteriv(ctx, name, pname, params); - break; - case GL_BUFFER_OBJECT_APPLE: - get_buffer_object_parameteriv(ctx, name, pname, params); - break; - default: - _mesa_error(ctx, GL_INVALID_ENUM, - "glGetObjectParameteriv(name = 0x%x) invalid type: %d", - name, objectType); - } -} - -#endif /* FEATURE_APPLE_object_purgeable */
Modified: trunk/reactos/dll/opengl/mesa/main/context.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/contex... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/context.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/context.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -494,7 +494,7 @@ _mesa_init_scissor( ctx ); _mesa_init_stencil( ctx ); _mesa_init_transform( ctx ); - _mesa_init_varray( ctx ); + _mesa_init_varray(ctx, &ctx->Array); _mesa_init_viewport( ctx );
if (!_mesa_init_texture( ctx )) @@ -748,9 +748,7 @@ _mesa_free_texture_data( ctx ); _mesa_free_matrix_data( ctx ); _mesa_free_viewport_data( ctx ); - _mesa_free_varray_data(ctx); - - _mesa_delete_array_object(ctx, ctx->Array.DefaultArrayObj); + _mesa_free_varray_data(ctx, &ctx->Array);
_mesa_reference_buffer_object(ctx, &ctx->Array.ArrayBufferObj, NULL);
Modified: trunk/reactos/dll/opengl/mesa/main/dd.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/dd.h?r... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/dd.h [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/dd.h [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -561,31 +561,6 @@
GLboolean (*UnmapBuffer)( struct gl_context *ctx, struct gl_buffer_object *obj ); - /*@}*/ - - /** - * \name Functions for GL_APPLE_object_purgeable - */ - /*@{*/ - /* variations on ObjectPurgeable */ - GLenum (*BufferObjectPurgeable)( struct gl_context *ctx, struct gl_buffer_object *obj, GLenum option ); - GLenum (*RenderObjectPurgeable)( struct gl_context *ctx, struct gl_renderbuffer *obj, GLenum option ); - GLenum (*TextureObjectPurgeable)( struct gl_context *ctx, struct gl_texture_object *obj, GLenum option ); - - /* variations on ObjectUnpurgeable */ - GLenum (*BufferObjectUnpurgeable)( struct gl_context *ctx, struct gl_buffer_object *obj, GLenum option ); - GLenum (*RenderObjectUnpurgeable)( struct gl_context *ctx, struct gl_renderbuffer *obj, GLenum option ); - GLenum (*TextureObjectUnpurgeable)( struct gl_context *ctx, struct gl_texture_object *obj, GLenum option ); - /*@}*/ - - - /** - * \name Vertex Array objects - */ - /*@{*/ - struct gl_array_object * (*NewArrayObject)(struct gl_context *ctx, GLuint id); - void (*DeleteArrayObject)(struct gl_context *ctx, struct gl_array_object *obj); - void (*BindArrayObject)(struct gl_context *ctx, struct gl_array_object *obj); /*@}*/
Modified: trunk/reactos/dll/opengl/mesa/main/dispatch.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/dispat... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/dispatch.h [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/dispatch.h [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -478,8 +478,6 @@ #define _gloffset_GetActiveAttribARB 569 #define _gloffset_FlushMappedBufferRange 580 #define _gloffset_MapBufferRange 581 -#define _gloffset_BindVertexArray 583 -#define _gloffset_GenVertexArrays 584 #define _gloffset_TexStorage1D 685 #define _gloffset_TexStorage2D 686 #define _gloffset_TexStorage3D 687 @@ -623,10 +621,6 @@ #define _gloffset_PointParameteriNV 863 #define _gloffset_PointParameterivNV 864 #define _gloffset_ActiveStencilFaceEXT 865 -#define _gloffset_BindVertexArrayAPPLE 866 -#define _gloffset_DeleteVertexArraysAPPLE 867 -#define _gloffset_GenVertexArraysAPPLE 868 -#define _gloffset_IsVertexArrayAPPLE 869 #define _gloffset_GetProgramNamedParameterdvNV 870 #define _gloffset_GetProgramNamedParameterfvNV 871 #define _gloffset_ProgramNamedParameter4dNV 872 @@ -698,8 +692,6 @@ #define VertexAttribDivisorARB_remap_index 171 #define FlushMappedBufferRange_remap_index 172 #define MapBufferRange_remap_index 173 -#define BindVertexArray_remap_index 175 -#define GenVertexArrays_remap_index 176 #define TexStorage1D_remap_index 277 #define TexStorage2D_remap_index 278 #define TexStorage3D_remap_index 279 @@ -844,10 +836,6 @@ #define PointParameteriNV_remap_index 455 #define PointParameterivNV_remap_index 456 #define ActiveStencilFaceEXT_remap_index 457 -#define BindVertexArrayAPPLE_remap_index 458 -#define DeleteVertexArraysAPPLE_remap_index 459 -#define GenVertexArraysAPPLE_remap_index 460 -#define IsVertexArrayAPPLE_remap_index 461 #define GetProgramNamedParameterdvNV_remap_index 462 #define GetProgramNamedParameterfvNV_remap_index 463 #define ProgramNamedParameter4dNV_remap_index 464 @@ -912,8 +900,6 @@ #define _gloffset_GetAttribLocationARB driDispatchRemapTable[GetAttribLocationARB_remap_index] #define _gloffset_FlushMappedBufferRange driDispatchRemapTable[FlushMappedBufferRange_remap_index] #define _gloffset_MapBufferRange driDispatchRemapTable[MapBufferRange_remap_index] -#define _gloffset_BindVertexArray driDispatchRemapTable[BindVertexArray_remap_index] -#define _gloffset_GenVertexArrays driDispatchRemapTable[GenVertexArrays_remap_index] #define _gloffset_TexStorage1D driDispatchRemapTable[TexStorage1D_remap_index] #define _gloffset_TexStorage2D driDispatchRemapTable[TexStorage2D_remap_index] #define _gloffset_TexStorage3D driDispatchRemapTable[TexStorage3D_remap_index] @@ -1057,10 +1043,6 @@ #define _gloffset_PointParameteriNV driDispatchRemapTable[PointParameteriNV_remap_index] #define _gloffset_PointParameterivNV driDispatchRemapTable[PointParameterivNV_remap_index] #define _gloffset_ActiveStencilFaceEXT driDispatchRemapTable[ActiveStencilFaceEXT_remap_index] -#define _gloffset_BindVertexArrayAPPLE driDispatchRemapTable[BindVertexArrayAPPLE_remap_index] -#define _gloffset_DeleteVertexArraysAPPLE driDispatchRemapTable[DeleteVertexArraysAPPLE_remap_index] -#define _gloffset_GenVertexArraysAPPLE driDispatchRemapTable[GenVertexArraysAPPLE_remap_index] -#define _gloffset_IsVertexArrayAPPLE driDispatchRemapTable[IsVertexArrayAPPLE_remap_index] #define _gloffset_GetProgramNamedParameterdvNV driDispatchRemapTable[GetProgramNamedParameterdvNV_remap_index] #define _gloffset_GetProgramNamedParameterfvNV driDispatchRemapTable[GetProgramNamedParameterfvNV_remap_index] #define _gloffset_ProgramNamedParameter4dNV driDispatchRemapTable[ProgramNamedParameter4dNV_remap_index] @@ -5577,28 +5559,6 @@ SET_by_offset(disp, _gloffset_MapBufferRange, fn); }
-typedef void (GLAPIENTRYP _glptr_BindVertexArray)(GLuint); -#define CALL_BindVertexArray(disp, parameters) \ - (* GET_BindVertexArray(disp)) parameters -static inline _glptr_BindVertexArray GET_BindVertexArray(struct _glapi_table *disp) { - return (_glptr_BindVertexArray) (GET_by_offset(disp, _gloffset_BindVertexArray)); -} - -static inline void SET_BindVertexArray(struct _glapi_table *disp, void (GLAPIENTRYP fn)(GLuint)) { - SET_by_offset(disp, _gloffset_BindVertexArray, fn); -} - -typedef void (GLAPIENTRYP _glptr_GenVertexArrays)(GLsizei, GLuint *); -#define CALL_GenVertexArrays(disp, parameters) \ - (* GET_GenVertexArrays(disp)) parameters -static inline _glptr_GenVertexArrays GET_GenVertexArrays(struct _glapi_table *disp) { - return (_glptr_GenVertexArrays) (GET_by_offset(disp, _gloffset_GenVertexArrays)); -} - -static inline void SET_GenVertexArrays(struct _glapi_table *disp, void (GLAPIENTRYP fn)(GLsizei, GLuint *)) { - SET_by_offset(disp, _gloffset_GenVertexArrays, fn); -} - typedef void (GLAPIENTRYP _glptr_TexStorage1D)(GLenum, GLsizei, GLenum, GLsizei); #define CALL_TexStorage1D(disp, parameters) \ (* GET_TexStorage1D(disp)) parameters @@ -7172,50 +7132,6 @@ SET_by_offset(disp, _gloffset_ActiveStencilFaceEXT, fn); }
-typedef void (GLAPIENTRYP _glptr_BindVertexArrayAPPLE)(GLuint); -#define CALL_BindVertexArrayAPPLE(disp, parameters) \ - (* GET_BindVertexArrayAPPLE(disp)) parameters -static inline _glptr_BindVertexArrayAPPLE GET_BindVertexArrayAPPLE(struct _glapi_table *disp) { - return (_glptr_BindVertexArrayAPPLE) (GET_by_offset(disp, _gloffset_BindVertexArrayAPPLE)); -} - -static inline void SET_BindVertexArrayAPPLE(struct _glapi_table *disp, void (GLAPIENTRYP fn)(GLuint)) { - SET_by_offset(disp, _gloffset_BindVertexArrayAPPLE, fn); -} - -typedef void (GLAPIENTRYP _glptr_DeleteVertexArraysAPPLE)(GLsizei, const GLuint *); -#define CALL_DeleteVertexArraysAPPLE(disp, parameters) \ - (* GET_DeleteVertexArraysAPPLE(disp)) parameters -static inline _glptr_DeleteVertexArraysAPPLE GET_DeleteVertexArraysAPPLE(struct _glapi_table *disp) { - return (_glptr_DeleteVertexArraysAPPLE) (GET_by_offset(disp, _gloffset_DeleteVertexArraysAPPLE)); -} - -static inline void SET_DeleteVertexArraysAPPLE(struct _glapi_table *disp, void (GLAPIENTRYP fn)(GLsizei, const GLuint *)) { - SET_by_offset(disp, _gloffset_DeleteVertexArraysAPPLE, fn); -} - -typedef void (GLAPIENTRYP _glptr_GenVertexArraysAPPLE)(GLsizei, GLuint *); -#define CALL_GenVertexArraysAPPLE(disp, parameters) \ - (* GET_GenVertexArraysAPPLE(disp)) parameters -static inline _glptr_GenVertexArraysAPPLE GET_GenVertexArraysAPPLE(struct _glapi_table *disp) { - return (_glptr_GenVertexArraysAPPLE) (GET_by_offset(disp, _gloffset_GenVertexArraysAPPLE)); -} - -static inline void SET_GenVertexArraysAPPLE(struct _glapi_table *disp, void (GLAPIENTRYP fn)(GLsizei, GLuint *)) { - SET_by_offset(disp, _gloffset_GenVertexArraysAPPLE, fn); -} - -typedef GLboolean (GLAPIENTRYP _glptr_IsVertexArrayAPPLE)(GLuint); -#define CALL_IsVertexArrayAPPLE(disp, parameters) \ - (* GET_IsVertexArrayAPPLE(disp)) parameters -static inline _glptr_IsVertexArrayAPPLE GET_IsVertexArrayAPPLE(struct _glapi_table *disp) { - return (_glptr_IsVertexArrayAPPLE) (GET_by_offset(disp, _gloffset_IsVertexArrayAPPLE)); -} - -static inline void SET_IsVertexArrayAPPLE(struct _glapi_table *disp, GLboolean (GLAPIENTRYP fn)(GLuint)) { - SET_by_offset(disp, _gloffset_IsVertexArrayAPPLE, fn); -} - typedef void (GLAPIENTRYP _glptr_GetProgramNamedParameterdvNV)(GLuint, GLsizei, const GLubyte *, GLdouble *); #define CALL_GetProgramNamedParameterdvNV(disp, parameters) \ (* GET_GetProgramNamedParameterdvNV(disp)) parameters @@ -7436,39 +7352,6 @@ SET_by_offset(disp, _gloffset_TextureRangeAPPLE, fn); }
-typedef void (GLAPIENTRYP _glptr_GetObjectParameterivAPPLE)(GLenum, GLuint, GLenum, GLint *); -#define CALL_GetObjectParameterivAPPLE(disp, parameters) \ - (* GET_GetObjectParameterivAPPLE(disp)) parameters -static inline _glptr_GetObjectParameterivAPPLE GET_GetObjectParameterivAPPLE(struct _glapi_table *disp) { - return (_glptr_GetObjectParameterivAPPLE) (GET_by_offset(disp, _gloffset_GetObjectParameterivAPPLE)); -} - -static inline void SET_GetObjectParameterivAPPLE(struct _glapi_table *disp, void (GLAPIENTRYP fn)(GLenum, GLuint, GLenum, GLint *)) { - SET_by_offset(disp, _gloffset_GetObjectParameterivAPPLE, fn); -} - -typedef GLenum (GLAPIENTRYP _glptr_ObjectPurgeableAPPLE)(GLenum, GLuint, GLenum); -#define CALL_ObjectPurgeableAPPLE(disp, parameters) \ - (* GET_ObjectPurgeableAPPLE(disp)) parameters -static inline _glptr_ObjectPurgeableAPPLE GET_ObjectPurgeableAPPLE(struct _glapi_table *disp) { - return (_glptr_ObjectPurgeableAPPLE) (GET_by_offset(disp, _gloffset_ObjectPurgeableAPPLE)); -} - -static inline void SET_ObjectPurgeableAPPLE(struct _glapi_table *disp, GLenum (GLAPIENTRYP fn)(GLenum, GLuint, GLenum)) { - SET_by_offset(disp, _gloffset_ObjectPurgeableAPPLE, fn); -} - -typedef GLenum (GLAPIENTRYP _glptr_ObjectUnpurgeableAPPLE)(GLenum, GLuint, GLenum); -#define CALL_ObjectUnpurgeableAPPLE(disp, parameters) \ - (* GET_ObjectUnpurgeableAPPLE(disp)) parameters -static inline _glptr_ObjectUnpurgeableAPPLE GET_ObjectUnpurgeableAPPLE(struct _glapi_table *disp) { - return (_glptr_ObjectUnpurgeableAPPLE) (GET_by_offset(disp, _gloffset_ObjectUnpurgeableAPPLE)); -} - -static inline void SET_ObjectUnpurgeableAPPLE(struct _glapi_table *disp, GLenum (GLAPIENTRYP fn)(GLenum, GLuint, GLenum)) { - SET_by_offset(disp, _gloffset_ObjectUnpurgeableAPPLE, fn); -} - typedef GLuint (GLAPIENTRYP _glptr_CreateShaderProgramEXT)(GLenum, const GLchar *); #define CALL_CreateShaderProgramEXT(disp, parameters) \ (* GET_CreateShaderProgramEXT(disp)) parameters
Modified: trunk/reactos/dll/opengl/mesa/main/dlist.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/dlist.... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/dlist.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/dlist.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -6730,16 +6730,6 @@ SET_PointParameteriNV(table, save_PointParameteriNV); SET_PointParameterivNV(table, save_PointParameterivNV);
- /* 273. GL_APPLE_vertex_array_object */ - SET_BindVertexArrayAPPLE(table, _mesa_BindVertexArrayAPPLE); - SET_DeleteVertexArraysAPPLE(table, _mesa_DeleteVertexArraysAPPLE); - SET_GenVertexArraysAPPLE(table, _mesa_GenVertexArraysAPPLE); - SET_IsVertexArrayAPPLE(table, _mesa_IsVertexArrayAPPLE); - - /* GL_ARB_vertex_array_object */ - SET_BindVertexArray(table, _mesa_BindVertexArray); - SET_GenVertexArrays(table, _mesa_GenVertexArrays); - /* ???. GL_EXT_depth_bounds_test */ SET_DepthBoundsEXT(table, save_DepthBoundsEXT);
@@ -6773,13 +6763,6 @@ #if FEATURE_ARB_map_buffer_range SET_MapBufferRange(table, _mesa_MapBufferRange); /* no dlist save */ SET_FlushMappedBufferRange(table, _mesa_FlushMappedBufferRange); /* no dl */ -#endif - - /* 371. GL_APPLE_object_purgeable */ -#if FEATURE_APPLE_object_purgeable - SET_ObjectPurgeableAPPLE(table, _mesa_ObjectPurgeableAPPLE); - SET_ObjectUnpurgeableAPPLE(table, _mesa_ObjectUnpurgeableAPPLE); - SET_GetObjectParameterivAPPLE(table, _mesa_GetObjectParameterivAPPLE); #endif
/* GL_EXT_texture_integer */
Modified: trunk/reactos/dll/opengl/mesa/main/enable.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/enable... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/enable.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/enable.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -41,77 +41,49 @@ static void client_state(struct gl_context *ctx, GLenum cap, GLboolean state) { - struct gl_array_object *arrayObj = ctx->Array.ArrayObj; GLbitfield64 flag; GLboolean *var;
switch (cap) { case GL_VERTEX_ARRAY: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled; + var = &ctx->Array.VertexAttrib[VERT_ATTRIB_POS].Enabled; flag = VERT_BIT_POS; break; case GL_NORMAL_ARRAY: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled; + var = &ctx->Array.VertexAttrib[VERT_ATTRIB_NORMAL].Enabled; flag = VERT_BIT_NORMAL; break; case GL_COLOR_ARRAY: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled; + var = &ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR0].Enabled; flag = VERT_BIT_COLOR0; break; case GL_INDEX_ARRAY: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled; + var = &ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled; flag = VERT_BIT_COLOR_INDEX; break; case GL_TEXTURE_COORD_ARRAY: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_TEX].Enabled; + var = &ctx->Array.VertexAttrib[VERT_ATTRIB_TEX].Enabled; flag = VERT_BIT_TEX; break; case GL_EDGE_FLAG_ARRAY: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled; + var = &ctx->Array.VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled; flag = VERT_BIT_EDGEFLAG; break; case GL_FOG_COORDINATE_ARRAY_EXT: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_FOG].Enabled; + var = &ctx->Array.VertexAttrib[VERT_ATTRIB_FOG].Enabled; flag = VERT_BIT_FOG; break; case GL_SECONDARY_COLOR_ARRAY_EXT: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled; + var = &ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR1].Enabled; flag = VERT_BIT_COLOR1; break;
#if FEATURE_point_size_array case GL_POINT_SIZE_ARRAY_OES: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled; + var = &ctx->Array.VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled; flag = VERT_BIT_POINT_SIZE; break; #endif - -#if FEATURE_NV_vertex_program - case GL_VERTEX_ATTRIB_ARRAY0_NV: - case GL_VERTEX_ATTRIB_ARRAY1_NV: - case GL_VERTEX_ATTRIB_ARRAY2_NV: - case GL_VERTEX_ATTRIB_ARRAY3_NV: - case GL_VERTEX_ATTRIB_ARRAY4_NV: - case GL_VERTEX_ATTRIB_ARRAY5_NV: - case GL_VERTEX_ATTRIB_ARRAY6_NV: - case GL_VERTEX_ATTRIB_ARRAY7_NV: - case GL_VERTEX_ATTRIB_ARRAY8_NV: - case GL_VERTEX_ATTRIB_ARRAY9_NV: - case GL_VERTEX_ATTRIB_ARRAY10_NV: - case GL_VERTEX_ATTRIB_ARRAY11_NV: - case GL_VERTEX_ATTRIB_ARRAY12_NV: - case GL_VERTEX_ATTRIB_ARRAY13_NV: - case GL_VERTEX_ATTRIB_ARRAY14_NV: - case GL_VERTEX_ATTRIB_ARRAY15_NV: - CHECK_EXTENSION(NV_vertex_program, cap); - { - GLint n = (GLint) cap - GL_VERTEX_ATTRIB_ARRAY0_NV; - ASSERT(VERT_ATTRIB_GENERIC(n) < Elements(ctx->Array.ArrayObj->VertexAttrib)); - var = &arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(n)].Enabled; - flag = VERT_BIT_GENERIC(n); - } - break; -#endif /* FEATURE_NV_vertex_program */
default: goto invalid_enum_error; @@ -128,9 +100,9 @@ *var = state;
if (state) - ctx->Array.ArrayObj->_Enabled |= flag; + ctx->Array._Enabled |= flag; else - ctx->Array.ArrayObj->_Enabled &= ~flag; + ctx->Array._Enabled &= ~flag;
if (ctx->Driver.Enable) { ctx->Driver.Enable( ctx, cap, state ); @@ -906,24 +878,24 @@
/* client-side state */ case GL_VERTEX_ARRAY: - return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled != 0); + return (ctx->Array.VertexAttrib[VERT_ATTRIB_POS].Enabled != 0); case GL_NORMAL_ARRAY: - return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled != 0); + return (ctx->Array.VertexAttrib[VERT_ATTRIB_NORMAL].Enabled != 0); case GL_COLOR_ARRAY: - return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled != 0); + return (ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR0].Enabled != 0); case GL_INDEX_ARRAY: - return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled != 0); + return (ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled != 0); case GL_TEXTURE_COORD_ARRAY: - return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_TEX] + return (ctx->Array.VertexAttrib[VERT_ATTRIB_TEX] .Enabled != 0); case GL_EDGE_FLAG_ARRAY: - return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled != 0); + return (ctx->Array.VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled != 0); case GL_FOG_COORDINATE_ARRAY_EXT: CHECK_EXTENSION(EXT_fog_coord); - return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_FOG].Enabled != 0); + return (ctx->Array.VertexAttrib[VERT_ATTRIB_FOG].Enabled != 0); case GL_SECONDARY_COLOR_ARRAY_EXT: CHECK_EXTENSION(EXT_secondary_color); - return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled != 0); + return (ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR1].Enabled != 0); #if FEATURE_point_size_array case GL_POINT_SIZE_ARRAY_OES: return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled != 0);
Modified: trunk/reactos/dll/opengl/mesa/main/extensions.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/extens... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/extensions.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/extensions.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -73,7 +73,6 @@ { "GL_ARB_texture_mirrored_repeat", o(dummy_true), 2001 }, { "GL_ARB_texture_storage", o(ARB_texture_storage), 2011 }, { "GL_ARB_transpose_matrix", o(ARB_transpose_matrix), 1999 }, - { "GL_ARB_vertex_array_object", o(ARB_vertex_array_object), 2006 }, { "GL_ARB_vertex_buffer_object", o(dummy_true), 2003 }, { "GL_ARB_window_pos", o(ARB_window_pos), 2001 }, /* EXT extensions */ @@ -112,9 +111,7 @@ { "GL_EXT_vertex_array", o(dummy_true), 1995 },
/* Vendor extensions */ - { "GL_APPLE_object_purgeable", o(APPLE_object_purgeable), 2006 }, { "GL_APPLE_packed_pixels", o(APPLE_packed_pixels), 2002 }, - { "GL_APPLE_vertex_array_object", o(APPLE_vertex_array_object), 2002 }, { "GL_ATI_blend_equation_separate", o(EXT_blend_equation_separate), 2003 }, { "GL_ATI_texture_env_combine3", o(ATI_texture_env_combine3), 2002 }, { "GL_IBM_multimode_draw_arrays", o(IBM_multimode_draw_arrays), 1998 }, @@ -206,11 +203,6 @@ ctx->Extensions.ARB_texture_env_dot3 = GL_TRUE; /*ctx->Extensions.ARB_texture_float = GL_TRUE;*/ ctx->Extensions.ARB_texture_storage = GL_TRUE; - ctx->Extensions.ARB_vertex_array_object = GL_TRUE; - ctx->Extensions.APPLE_vertex_array_object = GL_TRUE; -#if FEATURE_APPLE_object_purgeable - ctx->Extensions.APPLE_object_purgeable = GL_TRUE; -#endif ctx->Extensions.ATI_texture_env_combine3 = GL_TRUE; ctx->Extensions.EXT_blend_color = GL_TRUE; ctx->Extensions.EXT_blend_equation_separate = GL_TRUE;
Modified: trunk/reactos/dll/opengl/mesa/main/get.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/get.c?... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/get.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/get.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -262,12 +262,10 @@ EXTRA_EXT(NV_point_sprite); EXTRA_EXT(NV_light_max_exponent); EXTRA_EXT(EXT_depth_bounds_test); -EXTRA_EXT(APPLE_vertex_array_object); EXTRA_EXT(EXT_compiled_vertex_array); EXTRA_EXT2(NV_point_sprite, ARB_point_sprite);
static const int extra_version_30[] = { EXTRA_VERSION_30, EXTRA_END }; -static const int extra_version_31[] = { EXTRA_VERSION_31, EXTRA_END }; static const int extra_version_32[] = { EXTRA_VERSION_32, EXTRA_END };
#define API_OPENGL_BIT (1 << API_OPENGL) @@ -739,10 +737,6 @@ { GL_DEPTH_BOUNDS_EXT, CONTEXT_FLOAT2(Depth.BoundsMin), extra_EXT_depth_bounds_test },
- /* GL_APPLE_vertex_array_object */ - { GL_VERTEX_ARRAY_BINDING_APPLE, ARRAY_INT(Name), - extra_APPLE_vertex_array_object }, - /* GL_EXT_texture_integer */ { GL_RGBA_INTEGER_MODE_EXT, BUFFER_BOOL(_IntegerColor), extra_EXT_texture_integer }, @@ -929,7 +923,7 @@ case GL_TEXTURE_COORD_ARRAY_SIZE: case GL_TEXTURE_COORD_ARRAY_TYPE: case GL_TEXTURE_COORD_ARRAY_STRIDE: - array = &ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_TEX]; + array = &ctx->Array.VertexAttrib[VERT_ATTRIB_TEX]; v->value_int = *(GLuint *) ((char *) array + d->offset); break;
@@ -1032,7 +1026,7 @@ case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB: case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB: buffer_obj = (struct gl_buffer_object **) - ((char *) ctx->Array.ArrayObj + d->offset); + ((char *) &ctx->Array + d->offset); v->value_int = (*buffer_obj)->Name; break; case GL_ARRAY_BUFFER_BINDING_ARB: @@ -1040,10 +1034,10 @@ break; case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB: v->value_int = - ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_TEX].BufferObj->Name; + ctx->Array.VertexAttrib[VERT_ATTRIB_TEX].BufferObj->Name; break; case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB: - v->value_int = ctx->Array.ArrayObj->ElementArrayBufferObj->Name; + v->value_int = ctx->Array.ElementArrayBufferObj->Name; break;
case GL_FOG_COLOR: @@ -1195,7 +1189,7 @@ *p = ((char *) ctx + d->offset); return d; case LOC_ARRAY: - *p = ((char *) ctx->Array.ArrayObj + d->offset); + *p = ((char *)&ctx->Array + d->offset); return d; case LOC_TEXUNIT: unit = &ctx->Texture.Unit;
Modified: trunk/reactos/dll/opengl/mesa/main/getstring.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/getstr... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/getstring.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/getstring.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -125,28 +125,28 @@
switch (pname) { case GL_VERTEX_ARRAY_POINTER: - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POS].Ptr; + *params = (GLvoid *) ctx->Array.VertexAttrib[VERT_ATTRIB_POS].Ptr; break; case GL_NORMAL_ARRAY_POINTER: - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Ptr; + *params = (GLvoid *) ctx->Array.VertexAttrib[VERT_ATTRIB_NORMAL].Ptr; break; case GL_COLOR_ARRAY_POINTER: - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Ptr; + *params = (GLvoid *) ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR0].Ptr; break; case GL_SECONDARY_COLOR_ARRAY_POINTER_EXT: - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Ptr; + *params = (GLvoid *) ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR1].Ptr; break; case GL_FOG_COORDINATE_ARRAY_POINTER_EXT: - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_FOG].Ptr; + *params = (GLvoid *) ctx->Array.VertexAttrib[VERT_ATTRIB_FOG].Ptr; break; case GL_INDEX_ARRAY_POINTER: - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Ptr; + *params = (GLvoid *) ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Ptr; break; case GL_TEXTURE_COORD_ARRAY_POINTER: - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_TEX].Ptr; + *params = (GLvoid *) ctx->Array.VertexAttrib[VERT_ATTRIB_TEX].Ptr; break; case GL_EDGE_FLAG_ARRAY_POINTER: - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Ptr; + *params = (GLvoid *) ctx->Array.VertexAttrib[VERT_ATTRIB_EDGEFLAG].Ptr; break; case GL_FEEDBACK_BUFFER_POINTER: *params = ctx->Feedback.Buffer;
Modified: trunk/reactos/dll/opengl/mesa/main/mtypes.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/mtypes... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/mtypes.h [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/mtypes.h [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -1203,22 +1203,6 @@ _glthread_Mutex Mutex;
/** - * Does the VAO use ARB semantics or Apple semantics? - * - * There are several ways in which ARB_vertex_array_object and - * APPLE_vertex_array_object VAOs have differing semantics. At the very - * least, - * - * - ARB VAOs require that all array data be sourced from vertex buffer - * objects, but Apple VAOs do not. - * - * - ARB VAOs require that names come from GenVertexArrays. - * - * This flag notes which behavior governs this VAO. - */ - GLboolean ARBsemantics; - - /** * Has this array object been bound? */ GLboolean _Used; @@ -1244,23 +1228,28 @@ */ struct gl_array_attrib { - /** Currently bound array object. See _mesa_BindVertexArrayAPPLE() */ - struct gl_array_object *ArrayObj; - - /** The default vertex array object */ - struct gl_array_object *DefaultArrayObj; - - /** Array objects (GL_ARB/APPLE_vertex_array_object) */ - struct _mesa_HashTable *Objects; - - GLuint LockFirst; /**< GL_EXT_compiled_vertex_array */ - GLuint LockCount; /**< GL_EXT_compiled_vertex_array */ - - GLbitfield64 NewState; /**< mask of VERT_BIT_* values */ - GLboolean RebindArrays; /**< whether the VBO module should rebind arrays */ - - /* GL_ARB_vertex_buffer_object */ - struct gl_buffer_object *ArrayBufferObj; + /** Vertex attribute arrays */ + struct gl_client_array VertexAttrib[VERT_ATTRIB_MAX]; + + /** Mask of VERT_BIT_* values indicating which arrays are enabled */ + GLbitfield64 _Enabled; + + /** + * Min of all enabled arrays' _MaxElement. When arrays reside inside VBOs + * we can determine the max legal (in bounds) glDrawElements array index. + */ + GLuint _MaxElement; + + struct gl_buffer_object *ElementArrayBufferObj; + + GLuint LockFirst; /**< GL_EXT_compiled_vertex_array */ + GLuint LockCount; /**< GL_EXT_compiled_vertex_array */ + + GLbitfield64 NewState; /**< mask of VERT_BIT_* values */ + GLboolean RebindArrays; /**< whether the VBO module should rebind arrays */ + + /* GL_ARB_vertex_buffer_object */ + struct gl_buffer_object *ArrayBufferObj; };
@@ -1582,7 +1571,6 @@ GLboolean ARB_texture_env_dot3; GLboolean ARB_texture_storage; GLboolean ARB_transpose_matrix; - GLboolean ARB_vertex_array_object; GLboolean ARB_window_pos; GLboolean EXT_blend_color; GLboolean EXT_blend_equation_separate; @@ -1606,8 +1594,6 @@ GLboolean EXT_texture_integer; /* vendor extensions */ GLboolean APPLE_packed_pixels; - GLboolean APPLE_vertex_array_object; - GLboolean APPLE_object_purgeable; GLboolean ATI_texture_env_combine3; GLboolean IBM_rasterpos_clip; GLboolean IBM_multimode_draw_arrays;
Modified: trunk/reactos/dll/opengl/mesa/main/precomp.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/precom... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/precomp.h [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/precomp.h [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -6,7 +6,6 @@ #include "api_exec.h" #include "api_loopback.h" #include "api_validate.h" -#include "arrayobj.h" #include "attrib.h" #include "blend.h" #include "bufferobj.h"
Modified: trunk/reactos/dll/opengl/mesa/main/state.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/state.... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/state.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/state.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -61,7 +61,6 @@ static void update_arrays( struct gl_context *ctx ) { - struct gl_array_object *arrayObj = ctx->Array.ArrayObj; GLuint min = ~0;
/* find min of _MaxElement values for all enabled arrays. @@ -70,46 +69,46 @@ */
/* 0 */ - if (arrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled) { - min = update_min(min, &arrayObj->VertexAttrib[VERT_ATTRIB_POS]); + if (ctx->Array.VertexAttrib[VERT_ATTRIB_POS].Enabled) { + min = update_min(min, &ctx->Array.VertexAttrib[VERT_ATTRIB_POS]); }
/* 2 */ - if (arrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled) { - min = update_min(min, &arrayObj->VertexAttrib[VERT_ATTRIB_NORMAL]); + if (ctx->Array.VertexAttrib[VERT_ATTRIB_NORMAL].Enabled) { + min = update_min(min, &ctx->Array.VertexAttrib[VERT_ATTRIB_NORMAL]); }
/* 3 */ - if (arrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled) { - min = update_min(min, &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR0]); + if (ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR0].Enabled) { + min = update_min(min, &ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR0]); }
/* 4 */ - if (arrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled) { - min = update_min(min, &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR1]); + if (ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR1].Enabled) { + min = update_min(min, &ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR1]); }
/* 5 */ - if (arrayObj->VertexAttrib[VERT_ATTRIB_FOG].Enabled) { - min = update_min(min, &arrayObj->VertexAttrib[VERT_ATTRIB_FOG]); + if (ctx->Array.VertexAttrib[VERT_ATTRIB_FOG].Enabled) { + min = update_min(min, &ctx->Array.VertexAttrib[VERT_ATTRIB_FOG]); }
/* 6 */ - if (arrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled) { - min = update_min(min, &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX]); + if (ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled) { + min = update_min(min, &ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR_INDEX]); }
/* 8 */ - if (arrayObj->VertexAttrib[VERT_ATTRIB_TEX].Enabled) { - min = update_min(min, &arrayObj->VertexAttrib[VERT_ATTRIB_TEX]); - } - - if (arrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled) { - min = update_min(min, &arrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG]); + if (ctx->Array.VertexAttrib[VERT_ATTRIB_TEX].Enabled) { + min = update_min(min, &ctx->Array.VertexAttrib[VERT_ATTRIB_TEX]); + } + + if (ctx->Array.VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled) { + min = update_min(min, &ctx->Array.VertexAttrib[VERT_ATTRIB_EDGEFLAG]); }
/* _MaxElement is one past the last legal array element */ - arrayObj->_MaxElement = min; + ctx->Array._MaxElement = min; }
static void
Modified: trunk/reactos/dll/opengl/mesa/main/varray.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/varray... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/varray.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/varray.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -118,8 +118,7 @@ return; }
- if (ctx->Array.ArrayObj->ARBsemantics && - !_mesa_is_bufferobj(ctx->Array.ArrayBufferObj)) { + if (!_mesa_is_bufferobj(ctx->Array.ArrayBufferObj)) { /* GL_ARB_vertex_array_object requires that all arrays reside in VBOs. * Generate GL_INVALID_OPERATION if that's not true. */ @@ -129,7 +128,7 @@
elementSize = _mesa_sizeof_type(type) * size;
- array = &ctx->Array.ArrayObj->VertexAttrib[attrib]; + array = &ctx->Array.VertexAttrib[attrib]; array->Size = size; array->Type = type; array->Stride = stride; @@ -609,46 +608,22 @@ dst->_MaxElement = src->_MaxElement; }
- - -/** - * Print vertex array's fields. - */ static void -print_array(const char *name, GLint index, const struct gl_client_array *array) -{ - if (index >= 0) - printf(" %s[%d]: ", name, index); - else - printf(" %s: ", name); - printf("Ptr=%p, Type=0x%x, Size=%d, ElemSize=%u, Stride=%d, Buffer=%u(Size %lu), MaxElem=%u\n", - array->Ptr, array->Type, array->Size, - array->_ElementSize, array->StrideB, - array->BufferObj->Name, (unsigned long) array->BufferObj->Size, - array->_MaxElement); -} - - -/** - * Print current vertex object/array info. For debug. - */ -void -_mesa_print_arrays(struct gl_context *ctx) -{ - struct gl_array_object *arrayObj = ctx->Array.ArrayObj; - - _mesa_update_array_object_max_element(ctx, arrayObj); - - printf("Array Object %u\n", arrayObj->Name); - if (arrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled) - print_array("Vertex", -1, &arrayObj->VertexAttrib[VERT_ATTRIB_POS]); - if (arrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled) - print_array("Normal", -1, &arrayObj->VertexAttrib[VERT_ATTRIB_NORMAL]); - if (arrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled) - print_array("Color", -1, &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR0]); - if (arrayObj->VertexAttrib[VERT_ATTRIB_TEX].Enabled) - print_array("TexCoord", -1, &arrayObj->VertexAttrib[VERT_ATTRIB_TEX]); - printf(" _MaxElement = %u\n", arrayObj->_MaxElement); +init_array(struct gl_context *ctx, + struct gl_client_array *array, GLint size, GLint type) +{ + array->Size = size; + array->Type = type; + array->Stride = 0; + array->StrideB = 0; + array->Ptr = NULL; + array->Enabled = GL_FALSE; + array->Normalized = GL_FALSE; + array->Integer = GL_FALSE; + array->_ElementSize = size * _mesa_sizeof_type(type); + /* Vertex array buffers */ + _mesa_reference_buffer_object(ctx, &array->BufferObj, + ctx->Shared->NullBufferObj); }
@@ -656,25 +631,41 @@ * Initialize vertex array state for given context. */ void -_mesa_init_varray(struct gl_context *ctx) -{ - ctx->Array.DefaultArrayObj = _mesa_new_array_object(ctx, 0); - _mesa_reference_array_object(ctx, &ctx->Array.ArrayObj, - ctx->Array.DefaultArrayObj); - - ctx->Array.Objects = _mesa_NewHashTable(); -} - - -/** - * Callback for deleting an array object. Called by _mesa_HashDeleteAll(). - */ -static void -delete_arrayobj_cb(GLuint id, void *data, void *userData) -{ - struct gl_array_object *arrayObj = (struct gl_array_object *) data; - struct gl_context *ctx = (struct gl_context *) userData; - _mesa_delete_array_object(ctx, arrayObj); +_mesa_init_varray(struct gl_context *ctx, struct gl_array_attrib *array) +{ + GLuint i; + + /* Init the individual arrays */ + for (i = 0; i < Elements(array->VertexAttrib); i++) { + switch (i) { + case VERT_ATTRIB_WEIGHT: + init_array(ctx, &array->VertexAttrib[VERT_ATTRIB_WEIGHT], 1, GL_FLOAT); + break; + case VERT_ATTRIB_NORMAL: + init_array(ctx, &array->VertexAttrib[VERT_ATTRIB_NORMAL], 3, GL_FLOAT); + break; + case VERT_ATTRIB_COLOR1: + init_array(ctx, &array->VertexAttrib[VERT_ATTRIB_COLOR1], 3, GL_FLOAT); + break; + case VERT_ATTRIB_FOG: + init_array(ctx, &array->VertexAttrib[VERT_ATTRIB_FOG], 1, GL_FLOAT); + break; + case VERT_ATTRIB_COLOR_INDEX: + init_array(ctx, &array->VertexAttrib[VERT_ATTRIB_COLOR_INDEX], 1, GL_FLOAT); + break; + case VERT_ATTRIB_EDGEFLAG: + init_array(ctx, &array->VertexAttrib[VERT_ATTRIB_EDGEFLAG], 1, GL_BOOL); + break; + #if FEATURE_point_size_array + case VERT_ATTRIB_POINT_SIZE: + init_array(ctx, &array->VertexAttrib[VERT_ATTRIB_POINT_SIZE], 1, GL_FLOAT); + break; + #endif + default: + init_array(ctx, &array->VertexAttrib[i], 4, GL_FLOAT); + break; + } + } }
@@ -682,8 +673,14 @@ * Free vertex array state for given context. */ void -_mesa_free_varray_data(struct gl_context *ctx) -{ - _mesa_HashDeleteAll(ctx->Array.Objects, delete_arrayobj_cb, ctx); - _mesa_DeleteHashTable(ctx->Array.Objects); -} +_mesa_free_varray_data(struct gl_context *ctx, struct gl_array_attrib* array) +{ + GLuint i; + + /* Uninit the individual arrays */ + for (i = 0; i < Elements(array->VertexAttrib); i++) + { + _mesa_reference_buffer_object(ctx, &array->VertexAttrib[i].BufferObj, NULL); + memset(&array->VertexAttrib[i], 0, sizeof(struct gl_client_array)); + } +}
Modified: trunk/reactos/dll/opengl/mesa/main/varray.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/varray... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/varray.h [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/varray.h [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -175,15 +175,11 @@ struct gl_client_array *dst, struct gl_client_array *src);
- extern void -_mesa_print_arrays(struct gl_context *ctx); - -extern void -_mesa_init_varray( struct gl_context * ctx ); +_mesa_init_varray( struct gl_context * ctx, struct gl_array_attrib *array);
extern void -_mesa_free_varray_data(struct gl_context *ctx); +_mesa_free_varray_data(struct gl_context *ctx, struct gl_array_attrib *array);
#else
Modified: trunk/reactos/dll/opengl/mesa/main/version.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/main/versio... ============================================================================== --- trunk/reactos/dll/opengl/mesa/main/version.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/main/version.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -78,8 +78,7 @@ ctx->Extensions.EXT_blend_equation_separate); const GLboolean ver_2_1 = (ver_2_0); const GLboolean ver_3_0 = (ver_2_1 && - ctx->Extensions.ARB_map_buffer_range && - ctx->Extensions.APPLE_vertex_array_object); + ctx->Extensions.ARB_map_buffer_range);
if (ver_3_0) {
Modified: trunk/reactos/dll/opengl/mesa/vbo/vbo_exec_array.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/vbo/vbo_exe... ============================================================================== --- trunk/reactos/dll/opengl/mesa/vbo/vbo_exec_array.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/vbo/vbo_exec_array.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -224,15 +224,14 @@ check_draw_elements_data(struct gl_context *ctx, GLsizei count, GLenum elemType, const void *elements, GLint basevertex) { - struct gl_array_object *arrayObj = ctx->Array.ArrayObj; const void *elemMap; GLint i, k;
- if (_mesa_is_bufferobj(ctx->Array.ArrayObj->ElementArrayBufferObj)) { + if (_mesa_is_bufferobj(ctx->Array.ElementArrayBufferObj)) { elemMap = ctx->Driver.MapBufferRange(ctx, 0, - ctx->Array.ArrayObj->ElementArrayBufferObj->Size, + ctx->Array.ElementArrayBufferObj->Size, GL_MAP_READ_BIT, - ctx->Array.ArrayObj->ElementArrayBufferObj); + ctx->Array.ElementArrayBufferObj); elements = ADD_POINTERS(elements, elemMap); }
@@ -255,17 +254,17 @@ }
/* check element j of each enabled array */ - for (k = 0; k < Elements(arrayObj->VertexAttrib); k++) { - check_array_data(ctx, &arrayObj->VertexAttrib[k], k, j); - } - } - - if (_mesa_is_bufferobj(arrayObj->ElementArrayBufferObj)) { - ctx->Driver.UnmapBuffer(ctx, ctx->Array.ArrayObj->ElementArrayBufferObj); - } - - for (k = 0; k < Elements(arrayObj->VertexAttrib); k++) { - unmap_array_buffer(ctx, &arrayObj->VertexAttrib[k]); + for (k = 0; k < Elements(ctx->Array.VertexAttrib); k++) { + check_array_data(ctx, &ctx->Array.VertexAttrib[k], k, j); + } + } + + if (_mesa_is_bufferobj(ctx->Array.ElementArrayBufferObj)) { + ctx->Driver.UnmapBuffer(ctx, ctx->Array.ElementArrayBufferObj); + } + + for (k = 0; k < Elements(ctx->Array.VertexAttrib); k++) { + unmap_array_buffer(ctx, &ctx->Array.VertexAttrib[k]); } }
@@ -289,7 +288,6 @@ { struct vbo_context *vbo = vbo_context(ctx); struct vbo_exec_context *exec = &vbo->exec; - struct gl_array_object *arrayObj = ctx->Array.ArrayObj; int i;
printf("vbo_exec_DrawArrays(mode 0x%x, start %d, count %d):\n", @@ -305,7 +303,7 @@ exec->array.inputs[i]->Size, stride, /*exec->array.inputs[i]->Enabled,*/ - arrayObj->VertexAttrib[VERT_ATTRIB(i)].Enabled, + ctx->Array.VertexAttrib[VERT_ATTRIB(i)].Enabled, exec->array.inputs[i]->Ptr, bufName);
@@ -342,7 +340,7 @@ { struct vbo_context *vbo = vbo_context(ctx); struct vbo_exec_context *exec = &vbo->exec; - struct gl_client_array *vertexAttrib = ctx->Array.ArrayObj->VertexAttrib; + struct gl_client_array *vertexAttrib = ctx->Array.VertexAttrib; const struct gl_client_array **inputs = &exec->array.inputs[0]; GLbitfield64 const_inputs = 0x0; GLuint i; @@ -546,7 +544,7 @@
ib.count = count; ib.type = type; - ib.obj = ctx->Array.ArrayObj->ElementArrayBufferObj; + ib.obj = ctx->Array.ElementArrayBufferObj; ib.ptr = indices;
prim[0].begin = 1; @@ -619,7 +617,7 @@ return;
if (end < start || - end >= ctx->Array.ArrayObj->_MaxElement) { + end >= ctx->Array._MaxElement) { /* The application requested we draw using a range of indices that's * outside the bounds of the current VBO. This is invalid and appears * to give undefined results. The safest thing to do is to simply @@ -633,7 +631,7 @@ "\trange is outside VBO bounds (max=%u); ignoring.\n" "\tThis should be fixed in the application.", start, end, count, type, indices, - ctx->Array.ArrayObj->_MaxElement - 1); + ctx->Array._MaxElement - 1); } index_bounds_valid = GL_FALSE; } @@ -658,7 +656,7 @@ printf("glDraw[Range]Elements" "(start %u, end %u, type 0x%x, count %d) ElemBuf %u\n", start, end, type, count, - ctx->Array.ArrayObj->ElementArrayBufferObj->Name); + ctx->Array.ElementArrayBufferObj->Name); }
#if 0
Modified: trunk/reactos/dll/opengl/mesa/vbo/vbo_save_api.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/mesa/vbo/vbo_sav... ============================================================================== --- trunk/reactos/dll/opengl/mesa/vbo/vbo_save_api.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/mesa/vbo/vbo_save_api.c [iso-8859-1] Tue Jun 17 09:02:19 2014 @@ -1084,9 +1084,8 @@
_ae_map_vbos(ctx);
- if (_mesa_is_bufferobj(ctx->Array.ArrayObj->ElementArrayBufferObj)) - indices = - ADD_POINTERS(ctx->Array.ArrayObj->ElementArrayBufferObj->Pointer, indices); + if (_mesa_is_bufferobj(ctx->Array.ElementArrayBufferObj)) + indices = ADD_POINTERS(ctx->Array.ElementArrayBufferObj->Pointer, indices);
vbo_save_NotifyBegin(ctx, (mode | VBO_SAVE_PRIM_WEAK | VBO_SAVE_PRIM_NO_CURRENT_UPDATE));