trimvertpool.cc revision f220fa62
1/* 2** License Applicability. Except to the extent portions of this file are 3** made subject to an alternative license as permitted in the SGI Free 4** Software License B, Version 1.1 (the "License"), the contents of this 5** file are subject only to the provisions of the License. You may not use 6** this file except in compliance with the License. You may obtain a copy 7** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 8** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: 9** 10** http://oss.sgi.com/projects/FreeB 11** 12** Note that, as provided in the License, the Software is distributed on an 13** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS 14** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND 15** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A 16** PARTICULAR PURPOSE, AND NON-INFRINGEMENT. 17** 18** Original Code. The Original Code is: OpenGL Sample Implementation, 19** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, 20** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc. 21** Copyright in any portions created by third parties is as indicated 22** elsewhere herein. All Rights Reserved. 23** 24** Additional Notice Provisions: The application programming interfaces 25** established by SGI in conjunction with the Original Code are The 26** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released 27** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version 28** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X 29** Window System(R) (Version 1.3), released October 19, 1998. This software 30** was created using the OpenGL(R) version 1.2.1 Sample Implementation 31** published by SGI, but has not been independently verified as being 32** compliant with the OpenGL(R) version 1.2.1 Specification. 33*/ 34 35/* 36 * trimvertexpool.c++ 37 * 38 */ 39 40#include "glimports.h" 41#include "myassert.h" 42#include "mystdio.h" 43#include "mystring.h" 44#include "trimvertex.h" 45#include "trimvertpool.h" 46#include "bufpool.h" 47 48/*---------------------------------------------------------------------------- 49 * TrimVertexPool::TrimVertexPool 50 *---------------------------------------------------------------------------- 51 */ 52TrimVertexPool::TrimVertexPool( void ) 53 : pool( sizeof(TrimVertex)*3, 32, "Threevertspool" ) 54{ 55 // initialize array of pointers to vertex lists 56 nextvlistslot = 0; 57 vlistsize = INIT_VERTLISTSIZE; 58 vlist = new TrimVertex_p[vlistsize]; 59} 60 61/*---------------------------------------------------------------------------- 62 * TrimVertexPool::~TrimVertexPool 63 *---------------------------------------------------------------------------- 64 */ 65TrimVertexPool::~TrimVertexPool( void ) 66{ 67 // free all arrays of TrimVertices vertices 68 while( nextvlistslot ) { 69 delete [] vlist[--nextvlistslot]; 70 } 71 72 // reallocate space for array of pointers to vertex lists 73 if( vlist ) delete[] vlist; 74} 75 76/*---------------------------------------------------------------------------- 77 * TrimVertexPool::clear 78 *---------------------------------------------------------------------------- 79 */ 80void 81TrimVertexPool::clear( void ) 82{ 83 // reinitialize pool of 3 vertex arrays 84 pool.clear(); 85 86 // free all arrays of TrimVertices vertices 87 while( nextvlistslot ) { 88 delete [] vlist[--nextvlistslot]; 89 vlist[nextvlistslot] = 0; 90 } 91 92 // reallocate space for array of pointers to vertex lists 93 if( vlist ) delete[] vlist; 94 vlist = new TrimVertex_p[vlistsize]; 95} 96 97 98/*---------------------------------------------------------------------------- 99 * TrimVertexPool::get - allocate a vertex list 100 *---------------------------------------------------------------------------- 101 */ 102TrimVertex * 103TrimVertexPool::get( int n ) 104{ 105 TrimVertex *v; 106 if( n == 3 ) { 107 v = (TrimVertex *) pool.new_buffer(); 108 } else { 109 if( nextvlistslot == vlistsize ) { 110 vlistsize *= 2; 111 TrimVertex_p *nvlist = new TrimVertex_p[vlistsize]; 112 memcpy( nvlist, vlist, nextvlistslot * sizeof(TrimVertex_p) ); 113 if( vlist ) delete[] vlist; 114 vlist = nvlist; 115 } 116 v = vlist[nextvlistslot++] = new TrimVertex[n]; 117 } 118 return v; 119} 120