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(); }