diff --git a/stepmania/src/PrefsManager.cpp b/stepmania/src/PrefsManager.cpp index 510f9cfdbc..96ea056754 100644 --- a/stepmania/src/PrefsManager.cpp +++ b/stepmania/src/PrefsManager.cpp @@ -154,7 +154,6 @@ PrefsManager::PrefsManager() : m_bWindowed ( "Windowed", TRUE_IF_DEBUG ), m_iDisplayWidth ( "DisplayWidth", 640 ), m_iDisplayHeight ( "DisplayHeight", 480 ), - m_fDisplayAspectRatio ( "DisplayAspectRatio", 4/3.f ), m_iDisplayColorDepth ( "DisplayColorDepth", 16 ), m_iTextureColorDepth ( "TextureColorDepth", 16 ), m_iMovieColorDepth ( "MovieColorDepth", 16 ), @@ -431,8 +430,6 @@ void PrefsManager::ReadPrefsFromIni( const IniFile &ini, const RString &sSection IPreference::ReadAllPrefsFromNode( ini.GetChild(sSection) ); // validate - if( m_fDisplayAspectRatio < 0 ) - m_fDisplayAspectRatio.Set( 4/3.f ); m_iSongsPerPlay.Set( clamp(m_iSongsPerPlay.Get(),0,MAX_SONGS_PER_PLAY) ); m_RandomBackgroundMode.Set( (RandomBackgroundMode)clamp((int)m_RandomBackgroundMode.Get(),0,(int)NUM_RandomBackgroundMode-1) ); } diff --git a/stepmania/src/PrefsManager.h b/stepmania/src/PrefsManager.h index 50c1170b46..a8eacf5ff7 100644 --- a/stepmania/src/PrefsManager.h +++ b/stepmania/src/PrefsManager.h @@ -43,7 +43,6 @@ public: Preference m_bWindowed; Preference m_iDisplayWidth; Preference m_iDisplayHeight; - Preference m_fDisplayAspectRatio; Preference m_iDisplayColorDepth; Preference m_iTextureColorDepth; Preference m_iMovieColorDepth; diff --git a/stepmania/src/RageDisplay.h b/stepmania/src/RageDisplay.h index 18de1cd686..bb341c6042 100644 --- a/stepmania/src/RageDisplay.h +++ b/stepmania/src/RageDisplay.h @@ -139,6 +139,7 @@ public: virtual RString GetApiDescription() const = 0; virtual void GetDisplayResolutions( DisplayResolutions &out ) const = 0; + virtual float GetMonitorAspectRatio() const = 0; // Don't override this. Override TryVideoMode() instead. // This will set the video mode to be as close as possible to params. diff --git a/stepmania/src/RageDisplay_D3D.cpp b/stepmania/src/RageDisplay_D3D.cpp index 311f74109a..17a25b0ea3 100644 --- a/stepmania/src/RageDisplay_D3D.cpp +++ b/stepmania/src/RageDisplay_D3D.cpp @@ -314,6 +314,16 @@ void RageDisplay_D3D::GetDisplayResolutions( DisplayResolutions &out ) const } } +float RageDisplay_D3D::GetMonitorAspectRatio() const +{ +#if defined(XBOX) + // FIXME + return 4/3.f; +#else + return g_DesktopMode.Width / (float)g_DesktopMode.Height; +#endif +} + D3DFORMAT FindBackBufferType(bool bWindowed, int iBPP) { HRESULT hr; diff --git a/stepmania/src/RageDisplay_D3D.h b/stepmania/src/RageDisplay_D3D.h index 6982eac86b..ca388bd9df 100644 --- a/stepmania/src/RageDisplay_D3D.h +++ b/stepmania/src/RageDisplay_D3D.h @@ -12,6 +12,7 @@ public: virtual RString GetApiDescription() const { return "D3D"; } virtual void GetDisplayResolutions( DisplayResolutions &out ) const; + virtual float GetMonitorAspectRatio() const; void ResolutionChanged(); const PixelFormatDesc *GetPixelFormatDesc(PixelFormat pf) const; diff --git a/stepmania/src/RageDisplay_Null.h b/stepmania/src/RageDisplay_Null.h index f049f6eaa2..157604dc17 100644 --- a/stepmania/src/RageDisplay_Null.h +++ b/stepmania/src/RageDisplay_Null.h @@ -11,6 +11,7 @@ public: virtual RString GetApiDescription() const { return "Null"; } virtual void GetDisplayResolutions( DisplayResolutions &out ) const; + virtual float GetMonitorAspectRatio() const { return 4/3.f; } const PixelFormatDesc *GetPixelFormatDesc(PixelFormat pf) const; bool BeginFrame() { return true; } diff --git a/stepmania/src/RageDisplay_OGL.cpp b/stepmania/src/RageDisplay_OGL.cpp index 399ac3b8be..5a3a9550b5 100644 --- a/stepmania/src/RageDisplay_OGL.cpp +++ b/stepmania/src/RageDisplay_OGL.cpp @@ -445,6 +445,11 @@ void RageDisplay_OGL::GetDisplayResolutions( DisplayResolutions &out ) const g_pWind->GetDisplayResolutions( out ); } +float RageDisplay_OGL::GetMonitorAspectRatio() const +{ + return g_pWind->GetMonitorAspectRatio(); +} + static void CheckPalettedTextures() { RString sError; diff --git a/stepmania/src/RageDisplay_OGL.h b/stepmania/src/RageDisplay_OGL.h index 6c72d10d9f..c93e99e1b8 100644 --- a/stepmania/src/RageDisplay_OGL.h +++ b/stepmania/src/RageDisplay_OGL.h @@ -12,6 +12,7 @@ public: virtual RString GetApiDescription() const { return "OpenGL"; } virtual void GetDisplayResolutions( DisplayResolutions &out ) const; + virtual float GetMonitorAspectRatio() const; void ResolutionChanged(); const PixelFormatDesc *GetPixelFormatDesc(PixelFormat pf) const; diff --git a/stepmania/src/ScreenDimensions.cpp b/stepmania/src/ScreenDimensions.cpp index 1bd9036d10..05bd069d86 100644 --- a/stepmania/src/ScreenDimensions.cpp +++ b/stepmania/src/ScreenDimensions.cpp @@ -6,6 +6,7 @@ #include "LuaFunctions.h" #include "ThemeManager.h" #include "ThemeMetric.h" +#include "RageDisplay.h" static ThemeMetric THEME_SCREEN_WIDTH("Common","ScreenWidth"); static ThemeMetric THEME_SCREEN_HEIGHT("Common","ScreenHeight"); @@ -26,6 +27,24 @@ static ThemeMetric THEME_SCREEN_HEIGHT("Common","ScreenHeight"); */ #define THEME_NATIVE_ASPECT (THEME_SCREEN_WIDTH/THEME_SCREEN_HEIGHT) +#define ASPECT_AUTO -1 +static Preference g_fDisplayAspectRatio( "DisplayAspectRatio", ASPECT_AUTO ); + +float ScreenDimensions::GetScreenAspectRatio() +{ + float fAspect = g_fDisplayAspectRatio; + if( fAspect == ASPECT_AUTO ) + { + // Lua values will be reloaded after the display is created, so any value we + // return before DISPLAY is created will never be used. + if( DISPLAY ) + fAspect = DISPLAY->GetMonitorAspectRatio(); + else + fAspect = 4/3.f; + } + return fAspect; +} + float ScreenDimensions::GetThemeAspectRatio() { return THEME_NATIVE_ASPECT; @@ -33,7 +52,7 @@ float ScreenDimensions::GetThemeAspectRatio() float ScreenDimensions::GetScreenWidth() { - float fAspect = PREFSMAN->m_fDisplayAspectRatio; + float fAspect = GetScreenAspectRatio(); float fScale = 1; if( fAspect > THEME_NATIVE_ASPECT ) fScale = fAspect / THEME_NATIVE_ASPECT; @@ -43,7 +62,7 @@ float ScreenDimensions::GetScreenWidth() float ScreenDimensions::GetScreenHeight() { - float fAspect = PREFSMAN->m_fDisplayAspectRatio; + float fAspect = GetScreenAspectRatio(); float fScale = 1; if( fAspect < THEME_NATIVE_ASPECT ) fScale = THEME_NATIVE_ASPECT / fAspect; @@ -67,7 +86,7 @@ void ScreenDimensions::ReloadScreenDimensions() LUA->SetGlobal( "SCREEN_CENTER_Y", (int) SCREEN_CENTER_Y ); } -LuaFunction_NoArgs( GetScreenAspectRatio, PREFSMAN->m_fDisplayAspectRatio.Get() ); +LuaFunction_NoArgs( GetScreenAspectRatio, ScreenDimensions::GetScreenAspectRatio() ); LuaFunction_NoArgs( GetThemeAspectRatio, ScreenDimensions::GetThemeAspectRatio() ); diff --git a/stepmania/src/ScreenDimensions.h b/stepmania/src/ScreenDimensions.h index 7182c8c9bf..bb1f3809de 100644 --- a/stepmania/src/ScreenDimensions.h +++ b/stepmania/src/ScreenDimensions.h @@ -5,6 +5,7 @@ namespace ScreenDimensions { + float GetScreenAspectRatio(); float GetThemeAspectRatio(); float GetScreenWidth(); float GetScreenHeight(); diff --git a/stepmania/src/ScreenOptionsMasterPrefs.cpp b/stepmania/src/ScreenOptionsMasterPrefs.cpp index f73c24cd9a..c3aeb00568 100644 --- a/stepmania/src/ScreenOptionsMasterPrefs.cpp +++ b/stepmania/src/ScreenOptionsMasterPrefs.cpp @@ -506,7 +506,7 @@ static void RefreshRate( int &sel, bool ToSel, const ConfOption *pConfOption ) static void DisplayAspectRatio( int &sel, bool ToSel, const ConfOption *pConfOption ) { - const float mapping[] = { 3/4.f,1,4/3.0f,16/10.0f,16/9.f, 8/3.f }; + const float mapping[] = { -1,3/4.f,1,4/3.0f,16/10.0f,16/9.f, 8/3.f }; MoveMap( sel, pConfOption, ToSel, mapping, ARRAYSIZE(mapping) ); } @@ -614,7 +614,7 @@ static void InitializeConfOptions() g_ConfOptions.back().m_iEffects = OPT_APPLY_GRAPHICS; ADD( ConfOption( "DisplayResolution", DisplayResolutionM, DisplayResolutionChoices ) ); g_ConfOptions.back().m_iEffects = OPT_APPLY_GRAPHICS | OPT_APPLY_ASPECT_RATIO; - ADD( ConfOption( "DisplayAspectRatio", DisplayAspectRatio, "|3:4","|1:1","|4:3","|16:10","|16:9","|8:3" ) ); + ADD( ConfOption( "DisplayAspectRatio", DisplayAspectRatio, "Auto","|3:4","|1:1","|4:3","|16:10","|16:9","|8:3" ) ); g_ConfOptions.back().m_iEffects = OPT_APPLY_ASPECT_RATIO; ADD( ConfOption( "DisplayColorDepth", DisplayColorDepth, "16bit","32bit" ) ); g_ConfOptions.back().m_iEffects = OPT_APPLY_GRAPHICS; diff --git a/stepmania/src/StepMania.cpp b/stepmania/src/StepMania.cpp index 8195f27be8..b3e54ed032 100644 --- a/stepmania/src/StepMania.cpp +++ b/stepmania/src/StepMania.cpp @@ -102,7 +102,7 @@ void StepMania::GetPreferredVideoModeParams( VideoModeParams ¶msOut ) CommonMetrics::WINDOW_TITLE, THEME->GetPathG("Common","window icon"), PREFSMAN->m_bPAL, - PREFSMAN->m_fDisplayAspectRatio + ScreenDimensions::GetScreenAspectRatio() ); }