void GeoSphere::Update() { switch(m_initStage) { case eBuildFirstPatches: BuildFirstPatches(); break; case eRequestedFirstPatches: { ProcessSplitResults(); uint8_t numValidPatches = 0; for (int i=0; i<NUM_PATCHES; i++) { if(m_patches[i]->heights.Valid()) { ++numValidPatches; } } m_initStage = (NUM_PATCHES==numValidPatches) ? eReceivedFirstPatches : eRequestedFirstPatches; } break; case eReceivedFirstPatches: { for (int i=0; i<NUM_PATCHES; i++) { m_patches[i]->UpdateVBOs(); } m_initStage = eDefaultUpdateState; } break; case eDefaultUpdateState: if(m_hasTempCampos) { ProcessSplitResults(); for (int i=0; i<NUM_PATCHES; i++) { m_patches[i]->LODUpdate(m_tempCampos); } } break; } }
void GeoSphere::Update(const glm::vec3 &campos) { if(nullptr==mGeoPatches[0]) { BuildFirstPatches(); } else if(mSplitRequestDescriptions.empty()) { ProcessSplitResults(); for (int i=0; i<NUM_PATCHES; i++) { mGeoPatches[i]->LODUpdate(campos); } } else { ProcessSplitRequests(); } }