diff --git a/stepmania/Themes/default/Languages/en.ini b/stepmania/Themes/default/Languages/en.ini index 06135bb96b..f1735048b4 100644 --- a/stepmania/Themes/default/Languages/en.ini +++ b/stepmania/Themes/default/Languages/en.ini @@ -335,6 +335,7 @@ LifeDifficulty=Increase this value to cause your life meter to drain faster and LifeType=LifeType Advanced Options=Change advanced options such as scoring, timing window, and life meter settings. MasterVolume= +HighResolutionTextures=Choose whether high resolution textures will be loaded. High resolution textures will only work if supported by the current theme. MaxTextureResolution=Choose the maximum texture resolution. Setting this to anything below 1024 will cause some textures to appear blurry, but may increase your frame rate. MenuTimer=When &oq;OFF&cq;, the time limit in menus is disabled. Mines=Mines @@ -540,6 +541,8 @@ Flat=Flat Flip=Flip Floored=Floored Free Play=Free Play +Force Off=Force Off +Force On=Force On Full Screen=Full Screen Global BGAnimation=Global BGAnimation Global Movie=Global Movie @@ -779,6 +782,7 @@ Hands=Hands HiddenSongs=Hidden Songs Hide=Hide High Meter=High Meter +HighResolutionTextures=High Resolution Textures Holds=Holds Insert=Insert Insert Credit=Insert Credit @@ -796,6 +800,7 @@ Advanced Options=Advanced Options Main title=Main title Main title transliteration=Main title transliteration MaxTextureResolution=Texture Resolution +HighResolutoinTextures=High Resolution Textures MenuTimer=Menu Timer Meter=Meter Mines=Mines diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index 0c35e2e15c..05e965928f 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -2743,25 +2743,26 @@ Line30="conf,FastLoad" [ScreenOptionsGraphicsSound] Fallback="ScreenOptionsServiceChild" -LineNames="1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18" +LineNames="1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18,19" Line1="conf,Windowed" Line2="conf,DisplayResolution" Line3="conf,DisplayAspectRatio" Line4="conf,DisplayColorDepth" -Line5="conf,MaxTextureResolution" -Line6="conf,TextureColorDepth" -Line7="conf,MovieColorDepth" -Line8="conf,SmoothLines" -Line9="conf,CelShadeModels" -Line10="conf,DelayedTextureDelete" -Line11="conf,RefreshRate" -Line12="conf,Vsync" -Line13="conf,ShowStats" -Line14="conf,ShowBanners" -Line15="conf,AttractSoundFrequency" -Line16="conf,SoundVolume" -Line17="conf,EnableAttackSounds" -Line18="conf,EnableMineHitSound" +Line5="conf,HighResolutionTextures" +Line6="conf,MaxTextureResolution" +Line7="conf,TextureColorDepth" +Line8="conf,MovieColorDepth" +Line9="conf,SmoothLines" +Line10="conf,CelShadeModels" +Line11="conf,DelayedTextureDelete" +Line12="conf,RefreshRate" +Line13="conf,Vsync" +Line14="conf,ShowStats" +Line15="conf,ShowBanners" +Line16="conf,AttractSoundFrequency" +Line17="conf,SoundVolume" +Line18="conf,EnableAttackSounds" +Line19="conf,EnableMineHitSound" [ScreenAppearanceOptions] Fallback="ScreenOptionsServiceChild" diff --git a/stepmania/src/PrefsManager.cpp b/stepmania/src/PrefsManager.cpp index 927139238b..5289a594bb 100644 --- a/stepmania/src/PrefsManager.cpp +++ b/stepmania/src/PrefsManager.cpp @@ -83,6 +83,15 @@ XToString( BannerCacheMode ); StringToX( BannerCacheMode ); LuaXType( BannerCacheMode ); +static const char *HighResolutionTexturesNames[] = { + "Auto", + "ForceOff", + "ForceOn", +}; +XToString( HighResolutionTextures ); +StringToX( HighResolutionTextures ); +LuaXType( HighResolutionTextures ); + static const char *AttractSoundFrequencyNames[] = { "Never", "EveryTime", @@ -147,6 +156,7 @@ PrefsManager::PrefsManager() : m_iDisplayColorDepth ( "DisplayColorDepth", 16 ), m_iTextureColorDepth ( "TextureColorDepth", 16 ), m_iMovieColorDepth ( "MovieColorDepth", 16 ), + m_HighResolutionTextures ( "HighResolutionTextures", HighResolutionTextures_Auto ), m_iMaxTextureResolution ( "MaxTextureResolution", 2048 ), m_iRefreshRate ( "RefreshRate", REFRESH_DEFAULT ), m_bAllowMultitexture ( "AllowMultitexture", true ), diff --git a/stepmania/src/PrefsManager.h b/stepmania/src/PrefsManager.h index a5b4474d76..71213f6e6b 100644 --- a/stepmania/src/PrefsManager.h +++ b/stepmania/src/PrefsManager.h @@ -9,11 +9,38 @@ class IniFile; const int MAX_SONGS_PER_PLAY = 7; -enum MusicWheelUsesSections { MusicWheelUsesSections_NEVER, MusicWheelUsesSections_ALWAYS, MusicWheelUsesSections_ABC_ONLY, NUM_MusicWheelUsesSections, MusicWheelUsesSections_Invalid }; -enum AllowW1 { ALLOW_W1_NEVER, ALLOW_W1_COURSES_ONLY, ALLOW_W1_EVERYWHERE, NUM_AllowW1, AllowW1_Invalid }; -enum Maybe { Maybe_ASK, Maybe_NO, Maybe_YES, NUM_Maybe, Maybe_Invalid }; -enum GetRankingName { RANKING_OFF, RANKING_ON, RANKING_LIST, NUM_GetRankingName, GetRankingName_Invalid }; - +enum MusicWheelUsesSections +{ + MusicWheelUsesSections_NEVER, + MusicWheelUsesSections_ALWAYS, + MusicWheelUsesSections_ABC_ONLY, + NUM_MusicWheelUsesSections, + MusicWheelUsesSections_Invalid +}; +enum AllowW1 +{ + ALLOW_W1_NEVER, + ALLOW_W1_COURSES_ONLY, + ALLOW_W1_EVERYWHERE, + NUM_AllowW1, + AllowW1_Invalid +}; +enum Maybe +{ + Maybe_ASK, + Maybe_NO, + Maybe_YES, + NUM_Maybe, + Maybe_Invalid +}; +enum GetRankingName +{ + RANKING_OFF, + RANKING_ON, + RANKING_LIST, + NUM_GetRankingName, + GetRankingName_Invalid +}; enum RandomBackgroundMode { BGMODE_OFF, @@ -39,6 +66,14 @@ enum BannerCacheMode NUM_BannerCacheMode, BannerCacheMode_Invalid }; +enum HighResolutionTextures +{ + HighResolutionTextures_Auto, + HighResolutionTextures_ForceOff, + HighResolutionTextures_ForceOn, + NUM_HighResolutionTextures, + HighResolutionTextures_Invalid, +}; enum AttractSoundFrequency { ASF_NEVER, @@ -109,6 +144,7 @@ public: Preference m_iDisplayColorDepth; Preference m_iTextureColorDepth; Preference m_iMovieColorDepth; + Preference m_HighResolutionTextures; Preference m_iMaxTextureResolution; Preference m_iRefreshRate; Preference m_bAllowMultitexture; diff --git a/stepmania/src/RageBitmapTexture.cpp b/stepmania/src/RageBitmapTexture.cpp index 9730ae5197..93d99c4410 100644 --- a/stepmania/src/RageBitmapTexture.cpp +++ b/stepmania/src/RageBitmapTexture.cpp @@ -11,6 +11,7 @@ #include "RageSurfaceUtils_Dither.h" #include "RageSurface_Load.h" #include "arch/Dialog/Dialog.h" +#include "StepMania.h" static void GetResolutionFromFileName( RString sPath, int &iWidth, int &iHeight ) { @@ -122,9 +123,23 @@ void RageBitmapTexture::Create() m_iSourceWidth = pImg->w; m_iSourceHeight = pImg->h; + /* in-game imsage dimensions are the same as the source graphic */ + m_iImageWidth = m_iSourceWidth; + m_iImageHeight = m_iSourceHeight; + + /* if "doubleres" (high resolution) and we're not allowing high res textures, then image dimensions are half of the source */ + if( sHintString.find("doubleres") != string::npos ) + { + if( !StepMania::GetHighResolutionTextures() ) + { + m_iImageWidth = m_iImageWidth / 2; + m_iImageHeight = m_iImageHeight / 2; + } + } + /* image size cannot exceed max size */ - m_iImageWidth = min( m_iSourceWidth, actualID.iMaxSize ); - m_iImageHeight = min( m_iSourceHeight, actualID.iMaxSize ); + m_iImageWidth = min( m_iImageWidth, actualID.iMaxSize ); + m_iImageHeight = min( m_iImageHeight, actualID.iMaxSize ); /* Texture dimensions need to be a power of two; jump to the next. */ m_iTextureWidth = power_of_two(m_iImageWidth); @@ -293,6 +308,9 @@ void RageBitmapTexture::Create() /* Check for hints that override the apparent "size". */ GetResolutionFromFileName( actualID.filename, m_iSourceWidth, m_iSourceHeight ); + /* if "doubleres" (high resolution) then we want the image to appear in-game with dimensions 1/2 of the source. + * So, cut down the source dimension here after everythign above is finished operating with the real image + * source dimensions. */ if( sHintString.find("doubleres") != string::npos ) { m_iSourceWidth = m_iSourceWidth / 2; diff --git a/stepmania/src/RageTextureManager.h b/stepmania/src/RageTextureManager.h index d76f219323..80e53b228e 100644 --- a/stepmania/src/RageTextureManager.h +++ b/stepmania/src/RageTextureManager.h @@ -11,6 +11,7 @@ struct RageTextureManagerPrefs int m_iMovieColorDepth; bool m_bDelayedDelete; int m_iMaxTextureResolution; + bool m_bHighResolutionTextures; bool m_bMipMaps; RageTextureManagerPrefs() @@ -19,6 +20,7 @@ struct RageTextureManagerPrefs m_iMovieColorDepth = 16; m_iTextureColorDepth = 16; m_iMaxTextureResolution = 1024; + m_bHighResolutionTextures = true; m_bMipMaps = false; } RageTextureManagerPrefs( @@ -26,12 +28,14 @@ struct RageTextureManagerPrefs int iMovieColorDepth, bool bDelayedDelete, int iMaxTextureResolution, + bool bHighResolutionTextures, bool bMipMaps ) { m_bDelayedDelete = bDelayedDelete; m_iMovieColorDepth = iMovieColorDepth; m_iTextureColorDepth = iTextureColorDepth; m_iMaxTextureResolution = iMaxTextureResolution; + m_bHighResolutionTextures = bHighResolutionTextures; m_bMipMaps = bMipMaps; } @@ -42,6 +46,7 @@ struct RageTextureManagerPrefs m_iMovieColorDepth != rhs.m_iMovieColorDepth || m_bDelayedDelete != rhs.m_bDelayedDelete || m_iMaxTextureResolution != rhs.m_iMaxTextureResolution || + m_bHighResolutionTextures != rhs.m_bHighResolutionTextures || m_bMipMaps != rhs.m_bMipMaps; } }; diff --git a/stepmania/src/ScreenOptionsMasterPrefs.cpp b/stepmania/src/ScreenOptionsMasterPrefs.cpp index 624cb86045..6233a71fdb 100644 --- a/stepmania/src/ScreenOptionsMasterPrefs.cpp +++ b/stepmania/src/ScreenOptionsMasterPrefs.cpp @@ -710,6 +710,8 @@ static void InitializeConfOptions() g_ConfOptions.back().m_iEffects = OPT_APPLY_ASPECT_RATIO; ADD( ConfOption( "DisplayColorDepth", DisplayColorDepth, "16bit","32bit" ) ); g_ConfOptions.back().m_iEffects = OPT_APPLY_GRAPHICS; + ADD( ConfOption( "HighResolutionTextures", MovePref, "Auto","Force Off","Force On" ) ); + g_ConfOptions.back().m_iEffects = OPT_APPLY_GRAPHICS; ADD( ConfOption( "MaxTextureResolution", MaxTextureResolution, "|256","|512","|1024","|2048" ) ); g_ConfOptions.back().m_iEffects = OPT_APPLY_GRAPHICS; ADD( ConfOption( "TextureColorDepth", TextureColorDepth, "16bit","32bit" ) ); diff --git a/stepmania/src/StepMania.cpp b/stepmania/src/StepMania.cpp index f728d2f313..28f7125f13 100644 --- a/stepmania/src/StepMania.cpp +++ b/stepmania/src/StepMania.cpp @@ -146,6 +146,23 @@ static void StoreActualGraphicOptions() static RageDisplay *CreateDisplay(); +bool StepMania::GetHighResolutionTextures() +{ + switch( PREFSMAN->m_HighResolutionTextures ) + { + default: + case HighResolutionTextures_Auto: + { + const VideoModeParams ¶ms = DISPLAY->GetActualVideoModeParams(); + return params.height > 800; + } + case HighResolutionTextures_ForceOn: + return true; + case HighResolutionTextures_ForceOff: + return false; + } +} + static void StartDisplay() { if( DISPLAY != NULL ) @@ -167,6 +184,7 @@ static void StartDisplay() PREFSMAN->m_iMovieColorDepth, PREFSMAN->m_bDelayedTextureDelete, PREFSMAN->m_iMaxTextureResolution, + StepMania::GetHighResolutionTextures(), PREFSMAN->m_bForceMipMaps ) ); @@ -201,6 +219,7 @@ void StepMania::ApplyGraphicOptions() PREFSMAN->m_iMovieColorDepth, PREFSMAN->m_bDelayedTextureDelete, PREFSMAN->m_iMaxTextureResolution, + StepMania::GetHighResolutionTextures(), PREFSMAN->m_bForceMipMaps ) ); diff --git a/stepmania/src/StepMania.h b/stepmania/src/StepMania.h index d93ec10cf3..c78fc176ef 100644 --- a/stepmania/src/StepMania.h +++ b/stepmania/src/StepMania.h @@ -23,6 +23,7 @@ namespace StepMania void ClearCredits(); void GetPreferredVideoModeParams( VideoModeParams ¶msOut ); + bool GetHighResolutionTextures(); } #endif