void CFeatureDrawer::DrawFadeFeaturesSet(std::set<CFeature*>& fadeFeatures, int modelType) { for (std::set<CFeature*>::const_iterator fi = fadeFeatures.begin(); fi != fadeFeatures.end(); ) { std::set<CFeature*>::const_iterator fiNext(fi); fiNext++; const float cols[] = {1.0f, 1.0f, 1.0f, (*fi)->tempalpha}; if (modelType == MODELTYPE_S3O) { glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, cols); } // hack, sorting objects by distance would look better glAlphaFunc(GL_GREATER, (*fi)->tempalpha / 2.0f); glColor4fv(cols); if (!DrawFeatureNow(*fi)) { fadeFeatures.erase(*fi); fi = fiNext; } else { fi++; } } }
void CFeatureDrawer::DrawOpaqueFeatures(int modelType) { FeatureRenderBin& featureBin = opaqueModelRenderers[modelType]->GetFeatureBinMutable(); FeatureRenderBin::iterator featureBinIt; FeatureSet::iterator featureSetIt; for (featureBinIt = featureBin.begin(); featureBinIt != featureBin.end(); ++featureBinIt) { if (modelType != MODELTYPE_3DO) { texturehandlerS3O->SetS3oTexture(featureBinIt->first); } FeatureSet& featureSet = featureBinIt->second; for (featureSetIt = featureSet.begin(); featureSetIt != featureSet.end(); ) { if (!DrawFeatureNow(featureSetIt->first)) { featureSetIt = set_erase(featureSet, featureSetIt); } else { ++featureSetIt; } } } }