From bcf84d9bda9420219b11b782402f34599e36263c Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Mon, 6 Feb 2006 23:40:28 +0000 Subject: [PATCH] re-add Auto AR. Tie it to the desktop resolution which does not change when toggling between fullscreen and windowed. This assumes that the desktop resolution is using square pixels. This assumption will hold true for all out-of-the-box machines with a widescreen display. --- stepmania/src/PrefsManager.cpp | 3 --- stepmania/src/PrefsManager.h | 1 - stepmania/src/RageDisplay.h | 1 + stepmania/src/RageDisplay_D3D.cpp | 10 +++++++++ stepmania/src/RageDisplay_D3D.h | 1 + stepmania/src/RageDisplay_Null.h | 1 + stepmania/src/RageDisplay_OGL.cpp | 5 +++++ stepmania/src/RageDisplay_OGL.h | 1 + stepmania/src/ScreenDimensions.cpp | 25 +++++++++++++++++++--- stepmania/src/ScreenDimensions.h | 1 + stepmania/src/ScreenOptionsMasterPrefs.cpp | 4 ++-- stepmania/src/StepMania.cpp | 2 +- 12 files changed, 45 insertions(+), 10 deletions(-) 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() ); }