/* ================== FullscreenFXManager::Process ================== */ void FullscreenFXManager::Process( const renderView_t *view ) { bool allpass = false; bool atLeastOneFX = false; if ( g_testFullscreenFX.GetInteger() == -2 ) { allpass = true; } // do the first render gameRenderWorld->RenderScene( view ); // we should consider these on a case-by-case basis for stereo rendering // double vision could be implemented "for real" by shifting the // eye views if ( IsGameStereoRendered() && !player_allowScreenFXInStereo.GetBool() ) { return; } // do the process for ( int i = 0; i < fx.Num(); i++ ) { FullscreenFX *pfx = fx[i]; bool drawIt = false; // determine if we need to draw if ( pfx->Active() || g_testFullscreenFX.GetInteger() == i || allpass ) { drawIt = pfx->SetTriggerState( true ); } else { drawIt = pfx->SetTriggerState( false ); } // do the actual drawing if ( drawIt ) { atLeastOneFX = true; // we need to dump to _currentRender renderSystem->CaptureRenderToImage( "_currentRender" ); // handle the accum pass if we have one if ( pfx->HasAccum() ) { // we need to crop the accum pass renderSystem->CropRenderSize( 512, 512 ); pfx->AccumPass( view ); renderSystem->CaptureRenderToImage( "_accum" ); renderSystem->UnCrop(); } // do the high quality pass pfx->HighQuality(); // do the blendback Blendback( pfx->GetFadeAlpha() ); } } }
/* ================== FullscreenFXManager::Process ================== */ void FullscreenFXManager::Process( const renderView_t *view ) { bool allpass = false; bool atLeastOneFX = false; if ( g_testFullscreenFX.GetInteger() == -2 ) { allpass = true; } if ( g_lowresFullscreenFX.GetBool() ) { highQualityMode = false; } else { highQualityMode = true; } // compute the shift scale if ( highQualityMode ) { int vidWidth, vidHeight; renderSystem->GetGLSettings( vidWidth, vidHeight ); float pot; int w = vidWidth; pot = MakePowerOfTwo( w ); shiftScale.x = (float)w / pot; int h = vidHeight; pot = MakePowerOfTwo( h ); shiftScale.y = (float)h / pot; } else { // if we're in low-res mode, shrink view down shiftScale.x = 1; shiftScale.y = 1; renderSystem->CropRenderSize( 512, 512, true ); } // do the first render gameRenderWorld->RenderScene( view ); // do the process for ( int i = 0; i < fx.Num(); i++ ) { FullscreenFX *pfx = fx[i]; bool drawIt = false; // determine if we need to draw if ( pfx->Active() || g_testFullscreenFX.GetInteger() == i || allpass ) { drawIt = pfx->SetTriggerState( true ); } else { drawIt = pfx->SetTriggerState( false ); } // do the actual drawing if ( drawIt ) { atLeastOneFX = true; // we need to dump to _currentRender CaptureCurrentRender(); // handle the accum pass if we have one if ( pfx->HasAccum() ) { // if we're in high quality mode, we need to crop the accum pass if ( highQualityMode ) { renderSystem->CropRenderSize( 512, 512, true ); pfx->AccumPass( view ); renderSystem->UnCrop(); } else { pfx->AccumPass( view ); } } // do the high quality pass pfx->HighQuality(); // do the blendback Blendback( pfx->GetFadeAlpha() ); } } if ( !highQualityMode ) { // we need to dump to _currentRender CaptureCurrentRender(); // uncrop view renderSystem->UnCrop(); // draw the final full-screen image renderSystem->SetColor4( 1, 1, 1, 1 ); renderSystem->DrawStretchPic( 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1, 1, 0.f, blendBackMaterial ); } }