00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "indexbuffer.h"
00024 #include <string.h>
00025
00026 using namespace oxygen;
00027 using namespace boost;
00028
00029 IndexBuffer::IndexBuffer()
00030 : mMaxIndex(0), mNumIndex(0), mIndex(0) {}
00031
00032 IndexBuffer::~IndexBuffer()
00033 {
00034 }
00035
00036 void IndexBuffer::Cache(unsigned int numIndex, unsigned int *index)
00037 {
00038 EnsureFit(numIndex);
00039
00040
00041 memcpy(&mIndex[mNumIndex], index, numIndex*sizeof(unsigned int));
00042 mNumIndex += numIndex;
00043 }
00044
00045 void IndexBuffer::Cache(unsigned int newIndex)
00046 {
00047 Cache(1, &newIndex);
00048 }
00049
00050 void IndexBuffer::EnsureFit(unsigned int count)
00051 {
00052 if(mIndex.get() == 0)
00053 {
00054 mIndex = shared_array<unsigned int>(new unsigned int[count]);
00055 mMaxIndex = count;
00056 mNumIndex = 0;
00057 } else
00058 {
00059
00060 const unsigned int reqSize = mNumIndex+count;
00061
00062 if(mMaxIndex < reqSize)
00063 {
00064
00065 unsigned int newSize = mMaxIndex*2;
00066
00067 while(newSize<reqSize)
00068 {
00069 newSize *= 2;
00070 }
00071
00072
00073 shared_array<unsigned int> newIndex(new unsigned int[newSize]);
00074
00075
00076 memcpy(newIndex.get(), mIndex.get(),
00077 mNumIndex*sizeof(unsigned int));
00078
00079 mIndex = newIndex;
00080 mMaxIndex = newSize;
00081 }
00082 }
00083 }
00084
00085 void IndexBuffer::Flush()
00086 {
00087 mNumIndex = 0;
00088 }
00089
00090 int IndexBuffer::GetNumIndex() const
00091 {
00092 return mNumIndex;
00093 }
00094
00095 shared_array<unsigned int> IndexBuffer::GetIndex() const
00096 {
00097 return mIndex;
00098 }
00099