vbo_save.c revision fd2756006a0baf63f60548d8f509de5b9a143608
1fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell/* 2fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Mesa 3-D graphics library 3fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Version: 6.3 4fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * 5fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. 6fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * 7fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 8fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * copy of this software and associated documentation files (the "Software"), 9fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * to deal in the Software without restriction, including without limitation 10fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * and/or sell copies of the Software, and to permit persons to whom the 12fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Software is furnished to do so, subject to the following conditions: 13fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * 14fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * The above copyright notice and this permission notice shall be included 15fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * in all copies or substantial portions of the Software. 16fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * 17fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 21fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * 24fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Authors: 25fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Keith Whitwell <keith@tungstengraphics.com> 26fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell */ 27fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 28fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 29fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#include "mtypes.h" 30fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#include "dlist.h" 31fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#include "vtxfmt.h" 32fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#include "imports.h" 33fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 34fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#include "vbo_context.h" 35fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 36fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 37fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 38e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwellstatic void vbo_save_callback_init( GLcontext *ctx ) 39e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell{ 40e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell ctx->Driver.NewList = vbo_save_NewList; 41e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell ctx->Driver.EndList = vbo_save_EndList; 42e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell ctx->Driver.SaveFlushVertices = vbo_save_SaveFlushVertices; 43e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell ctx->Driver.BeginCallList = vbo_save_BeginCallList; 44e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell ctx->Driver.EndCallList = vbo_save_EndCallList; 45e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell ctx->Driver.NotifySaveBegin = vbo_save_NotifyBegin; 46e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell} 47e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell 48e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell 49e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell 50fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellvoid vbo_save_init( GLcontext *ctx ) 51fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{ 52fd2756006a0baf63f60548d8f509de5b9a143608Keith Whitwell struct vbo_context *vbo = vbo_context(ctx); 53fd2756006a0baf63f60548d8f509de5b9a143608Keith Whitwell struct vbo_save_context *save = &vbo->save; 54fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 55fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell save->ctx = ctx; 56fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 57fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell vbo_save_api_init( save ); 58e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell vbo_save_callback_init(ctx); 59fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 60fd2756006a0baf63f60548d8f509de5b9a143608Keith Whitwell { 61fd2756006a0baf63f60548d8f509de5b9a143608Keith Whitwell struct gl_client_array *arrays = save->arrays; 62fd2756006a0baf63f60548d8f509de5b9a143608Keith Whitwell memcpy(arrays, vbo->legacy_currval, 16 * sizeof(arrays[0])); 63fd2756006a0baf63f60548d8f509de5b9a143608Keith Whitwell memcpy(arrays + 16, vbo->generic_currval, 16 * sizeof(arrays[0])); 64fd2756006a0baf63f60548d8f509de5b9a143608Keith Whitwell } 65fd2756006a0baf63f60548d8f509de5b9a143608Keith Whitwell 66fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell ctx->Driver.CurrentSavePrimitive = PRIM_UNKNOWN; 67fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell} 68fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 69fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 70fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellvoid vbo_save_destroy( GLcontext *ctx ) 71fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{ 72fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell} 73fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 74fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 75fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 76fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 77fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell/* Note that this can occur during the playback of a display list: 78fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell */ 79fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellvoid vbo_save_fallback( GLcontext *ctx, GLboolean fallback ) 80fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{ 81fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell struct vbo_save_context *save = &vbo_context(ctx)->save; 82fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 83fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell if (fallback) 84fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell save->replay_flags |= VBO_SAVE_FALLBACK; 85fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell else 86fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell save->replay_flags &= ~VBO_SAVE_FALLBACK; 87fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell} 88fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 89fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 90