bool MarchingCubesBuffers::forceAllocateEdgeBuffers(unsigned int width, unsigned int height)
{
	// allocate the edge buffer without checking to see if we already have a big enough buffer
	m_EdgeCaches[0] = new unsigned int[width*height];
	m_EdgeCaches[1] = new unsigned int[width*height];
	m_EdgeCaches[2] = new unsigned int[width*height];
	m_EdgeCaches[3] = new unsigned int[width*height];
	m_EdgeCaches[4] = new unsigned int[width*height];

	m_VertClassifications[0] = new unsigned int[width*height];
	m_VertClassifications[1] = new unsigned int[width*height];

	if (m_EdgeCaches[0]&&
		m_EdgeCaches[1]&&
		m_EdgeCaches[2]&&
		m_EdgeCaches[3]&&
		m_EdgeCaches[4]&&
		m_VertClassifications[0]&&
		m_VertClassifications[0]) {
		m_AmountAllocated = width*height;
		return true;
	}
	else {
		destroyEdgeBuffers();
		return false;
	}
}
 bool MarchingCubesBuffers::allocateEdgeBuffers(unsigned int width, unsigned int height)
 {
   // only allocate memory if our current buffer is not big enough
   if (width*height>m_AmountAllocated) {
     destroyEdgeBuffers();
     return forceAllocateEdgeBuffers(width, height);	
   }
   else {
     return true;
   }
 }
 MarchingCubesBuffers::~MarchingCubesBuffers()
 {
   destroyEdgeBuffers();
 }