void CFeatureDrawer::DrawFadeFeatures(bool noAdvShading) { const bool oldAdvShading = unitDrawer->advShading; { unitDrawer->advShading = unitDrawer->advShading && !noAdvShading; if (unitDrawer->advShading) { unitDrawer->SetupForUnitDrawing(); } else { unitDrawer->SetupForGhostDrawing(); } glPushAttrib(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glDepthMask(GL_TRUE); glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, 0.5f); if (globalRendering->drawFog) { glEnable(GL_FOG); glFogfv(GL_FOG_COLOR, mapInfo->atmosphere.fogColor); } { GML_RECMUTEX_LOCK(feat); // DrawFadeFeatures for (int modelType = MODELTYPE_3DO; modelType < MODELTYPE_OTHER; modelType++) { cloakedModelRenderers[modelType]->PushRenderState(); DrawFadeFeaturesHelper(modelType); cloakedModelRenderers[modelType]->PopRenderState(); } } glDisable(GL_FOG); glPopAttrib(); if (unitDrawer->advShading) { unitDrawer->CleanUpUnitDrawing(); } else { unitDrawer->CleanUpGhostDrawing(); } unitDrawer->advShading = oldAdvShading; } }
void CFeatureDrawer::DrawFadeFeatures(bool noAdvShading) { const bool oldAdvShading = unitDrawer->UseAdvShading(); { unitDrawer->SetUseAdvShading(unitDrawer->UseAdvShading() && !noAdvShading); if (unitDrawer->UseAdvShading()) { unitDrawer->SetupForUnitDrawing(false); } else { unitDrawer->SetupForGhostDrawing(); } glPushAttrib(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glDepthMask(GL_TRUE); glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, 0.5f); ISky::SetupFog(); { GML_RECMUTEX_LOCK(feat); // DrawFadeFeatures for (int modelType = MODELTYPE_3DO; modelType < MODELTYPE_OTHER; modelType++) { cloakedModelRenderers[modelType]->PushRenderState(); DrawFadeFeaturesHelper(modelType); cloakedModelRenderers[modelType]->PopRenderState(); } } glDisable(GL_FOG); glPopAttrib(); if (unitDrawer->UseAdvShading()) { unitDrawer->CleanUpUnitDrawing(false); } else { unitDrawer->CleanUpGhostDrawing(); } unitDrawer->SetUseAdvShading(oldAdvShading); } }