void GeoSphere::ProcessSplitResults() { // now handle the single split results that define the base level of the quad tree { std::deque<SSingleSplitResult*>::iterator iter = mSingleSplitResults.begin(); while(iter!=mSingleSplitResults.end()) { // finally pass SplitResults SSingleSplitResult *psr = (*iter); const int32_t faceIdx = psr->face(); if( m_patches[faceIdx] ) { m_patches[faceIdx]->ReceiveHeightmap(psr); } else { psr->OnCancel(); } // tidyup delete psr; // Next! ++iter; } mSingleSplitResults.clear(); } // now handle the quad split results { std::deque<SQuadSplitResult*>::iterator iter = mQuadSplitResults.begin(); while(iter!=mQuadSplitResults.end()) { // finally pass SplitResults SQuadSplitResult *psr = (*iter); const int32_t faceIdx = psr->face(); if( m_patches[faceIdx] ) { m_patches[faceIdx]->ReceiveHeightmaps(psr); } else { psr->OnCancel(); } // tidyup delete psr; // Next! ++iter; } mQuadSplitResults.clear(); } }
void GeoSphere::Reset() { { std::deque<SSingleSplitResult*>::iterator iter = mSingleSplitResults.begin(); while(iter!=mSingleSplitResults.end()) { // finally pass SplitResults SSingleSplitResult *psr = (*iter); psr->OnCancel(); // tidyup delete psr; // Next! ++iter; } mSingleSplitResults.clear(); } { std::deque<SQuadSplitResult*>::iterator iter = mQuadSplitResults.begin(); while(iter!=mQuadSplitResults.end()) { // finally pass SplitResults SQuadSplitResult *psr = (*iter); psr->OnCancel(); // tidyup delete psr; // Next! ++iter; } mQuadSplitResults.clear(); } for (int p=0; p<NUM_PATCHES; p++) { // delete patches if (m_patches[p].Valid()) { m_patches[p].Reset(); } } m_initStage = eBuildFirstPatches; }