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