From da160607b86d3db9e6ff061fccea2fc13e7437a3 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Tue, 25 Nov 2003 22:56:48 +0000 Subject: [PATCH] Allow preloading all song banners. --- stepmania/src/BannerCache.cpp | 13 ++++++------- stepmania/src/FadingBanner.cpp | 9 +++++++-- stepmania/src/PrefsManager.cpp | 6 +++--- stepmania/src/PrefsManager.h | 3 ++- stepmania/src/SongManager.cpp | 21 +++++++++++++++++++++ stepmania/src/SongManager.h | 1 + stepmania/src/StepMania.cpp | 22 ++++++++++++---------- 7 files changed, 52 insertions(+), 23 deletions(-) diff --git a/stepmania/src/BannerCache.cpp b/stepmania/src/BannerCache.cpp index 2ed38d8ef3..b43d2731a2 100644 --- a/stepmania/src/BannerCache.cpp +++ b/stepmania/src/BannerCache.cpp @@ -17,6 +17,10 @@ #include "SDL_dither.h" #include "SDL_image.h" #include "SDL_rotozoom.h" +#include "SDL_utils.h" +#include "RageDisplay.h" +#include "RageTexture.h" +#include "RageTextureManager.h" #include "Banner.h" @@ -55,7 +59,7 @@ CString BannerCache::GetBannerCachePath( CString BannerPath ) void BannerCache::LoadBanner( CString BannerPath ) { - if( !PREFSMAN->m_bBannerCache || BannerPath == "" ) + if( PREFSMAN->m_BannerCache != PrefsManager::BNCACHE_LOW_RES || BannerPath == "" ) return; /* Load it. */ @@ -125,11 +129,6 @@ BannerCache::~BannerCache() UnloadAllBanners(); } -#include "SDL_utils.h" -#include "RageDisplay.h" -#include "RageTexture.h" -#include "RageTextureManager.h" - struct BannerTexture: public RageTexture { unsigned m_uTexHandle; @@ -397,7 +396,7 @@ void BannerCache::CacheBannerInternal( CString BannerPath ) const CString CachePath = GetBannerCachePath(BannerPath); mySDL_SaveSurface( img, CachePath ); - if( PREFSMAN->m_bBannerCache ) + if( PREFSMAN->m_BannerCache == PrefsManager::BNCACHE_LOW_RES ) { /* If an old image is loaded, free it. */ if( m_BannerPathToImage.find(BannerPath) != m_BannerPathToImage.end() ) diff --git a/stepmania/src/FadingBanner.cpp b/stepmania/src/FadingBanner.cpp index 1c6e0b4ee1..2c1358dc50 100644 --- a/stepmania/src/FadingBanner.cpp +++ b/stepmania/src/FadingBanner.cpp @@ -112,8 +112,13 @@ void FadingBanner::LoadFromCachedBanner( const CString &path ) /* No matter what we load, ensure we don't fade to a stale path. */ m_sPendingBanner = ""; - /* Try to load the low quality version. */ - RageTextureID ID = BANNERCACHE->LoadCachedBanner( path ); + RageTextureID ID; + if( PREFSMAN->m_BannerCache == PrefsManager::BNCACHE_FULL ) + ID = Banner::BannerTex( path ); + else + /* Try to load the low quality version. */ + ID = BANNERCACHE->LoadCachedBanner( path ); + if( !TEXTUREMAN->IsTextureRegistered(ID) ) { /* Oops. We couldn't load a banner quickly. We can load the actual diff --git a/stepmania/src/PrefsManager.cpp b/stepmania/src/PrefsManager.cpp index 4282ad227e..bf89245d84 100644 --- a/stepmania/src/PrefsManager.cpp +++ b/stepmania/src/PrefsManager.cpp @@ -93,7 +93,7 @@ PrefsManager::PrefsManager() m_bDelayedTextureDelete = true; m_bTexturePreload = false; m_bDelayedScreenLoad = false; - m_bBannerCache = true; + m_BannerCache = BNCACHE_LOW_RES; m_MusicWheelUsesSections = ALWAYS; m_iMusicWheelSwitchSpeed = 10; m_bEasterEggs = true; @@ -283,7 +283,7 @@ void PrefsManager::ReadGlobalPrefsFromDisk() ini.GetValue( "Options", "DelayedTextureDelete", m_bDelayedTextureDelete ); ini.GetValue( "Options", "TexturePreload", m_bTexturePreload ); ini.GetValue( "Options", "DelayedScreenLoad", m_bDelayedScreenLoad ); - ini.GetValue( "Options", "BannerCache", m_bBannerCache ); + ini.GetValue( "Options", "BannerCache", (int&)m_BannerCache ); ini.GetValue( "Options", "MusicWheelUsesSections", (int&)m_MusicWheelUsesSections ); ini.GetValue( "Options", "MusicWheelSwitchSpeed", m_iMusicWheelSwitchSpeed ); ini.GetValue( "Options", "SoundDrivers", m_sSoundDrivers ); @@ -445,7 +445,7 @@ void PrefsManager::SaveGlobalPrefsToDisk() const ini.SetValue( "Options", "DelayedTextureDelete", m_bDelayedTextureDelete ); ini.SetValue( "Options", "TexturePreload", m_bTexturePreload ); ini.SetValue( "Options", "DelayedScreenLoad", m_bDelayedScreenLoad ); - ini.SetValue( "Options", "BannerCache", m_bBannerCache ); + ini.SetValue( "Options", "BannerCache", m_BannerCache ); ini.SetValue( "Options", "MusicWheelUsesSections", m_MusicWheelUsesSections ); ini.SetValue( "Options", "MusicWheelSwitchSpeed", m_iMusicWheelSwitchSpeed ); ini.SetValue( "Options", "EasterEggs", m_bEasterEggs ); diff --git a/stepmania/src/PrefsManager.h b/stepmania/src/PrefsManager.h index 675a79a6d9..25097dd1e1 100644 --- a/stepmania/src/PrefsManager.h +++ b/stepmania/src/PrefsManager.h @@ -46,7 +46,8 @@ public: bool m_bDelayedTextureDelete; bool m_bTexturePreload; bool m_bDelayedScreenLoad; - bool m_bBannerCache; + enum BannerCacheMode { BNCACHE_OFF, BNCACHE_LOW_RES, BNCACHE_FULL }; + BannerCacheMode m_BannerCache; bool m_bOnlyDedicatedMenuButtons; bool m_bMenuTimer; diff --git a/stepmania/src/SongManager.cpp b/stepmania/src/SongManager.cpp index cc09103136..a5b6ac6fd7 100644 --- a/stepmania/src/SongManager.cpp +++ b/stepmania/src/SongManager.cpp @@ -29,6 +29,8 @@ #include "GameManager.h" #include "RageFile.h" #include "ProductInfo.h" +#include "RageTextureManager.h" +#include "Banner.h" SongManager* SONGMAN = NULL; // global and accessable from anywhere in our program @@ -302,6 +304,25 @@ void SongManager::LoadGroupSymLinks(CString sDir, CString sGroupFolder) } } +void SongManager::PreloadSongImages() +{ + ASSERT( TEXTUREMAN ); + if( PREFSMAN->m_BannerCache != PrefsManager::BNCACHE_FULL ) + return; + + const vector &songs = SONGMAN->GetAllSongs(); + unsigned i; + for( i = 0; i < songs.size(); ++i ) + { + if( !songs[i]->HasBanner() ) + continue; + + const RageTextureID ID = Banner::BannerTex( songs[i]->GetBannerPath() ); + TEXTUREMAN->CacheTexture( ID ); + } + +} + void SongManager::FreeSongs() { for( unsigned i=0; im_bBannerCache = !LowMemory; + PREFSMAN->m_BannerCache = LowMemory? PrefsManager::BNCACHE_OFF:PrefsManager::BNCACHE_LOW_RES; PREFSMAN->SaveGlobalPrefsToDisk(); #endif @@ -755,18 +755,16 @@ void SaveGamePrefsToDisk() #define UNLOCKS_PATH BASE_PATH "Data" SLASH "Unlocks.dat" #ifdef _XBOX -char *xboxargv[] = { "d:\\default.xbe" } ; +char *xboxargv[] = { "d:\\default.xbe" }; extern RageDisplay::VideoModeParams g_CurrentParams; - #endif int main(int argc, char* argv[]) { - #ifdef _XBOX - argc = 1 ; - argv = xboxargv ; - XGetCustomLaunchData() ; + argc = 1; + argv = xboxargv; + XGetCustomLaunchData(); #endif g_argc = argc; @@ -881,6 +879,8 @@ int main(int argc, char* argv[]) g_hWndMain = info.window; #endif + SONGMAN->PreloadSongImages(); + /* This initializes objects that change the SDL event mask, and has other * dependencies on the SDL video subsystem, so it must be initialized after * DISPLAY and setting the default SDL event mask. */ @@ -903,9 +903,11 @@ int main(int argc, char* argv[]) SONGMAN->UpdateRankingCourses(); #ifdef _XBOX - g_CurrentParams.width = 600 ; - g_CurrentParams.height= 400 ; - DISPLAY->ResolutionChanged() ; + /* XXX: This is a bad way to do this. Instead, add an "XBOX" entry to + * g_VideoCardDefaults (and make sure the name shows up, so it matches). */ + g_CurrentParams.width = 600; + g_CurrentParams.height= 400; + DISPLAY->ResolutionChanged(); #endif /* Run the main loop. */