From 354f1e5f44e71b4175eccaad6ca11d81b644f779 Mon Sep 17 00:00:00 2001 From: John Peterson Date: Tue, 24 Feb 2009 19:16:08 +0000 Subject: [PATCH] OpenGL: Added keep 16:9 aspect ratio, if anyone is displeased with the stretching to 16:10, and would rather want a letterbox git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2418 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/MusicMod.sln | 2 -- Source/Plugins/Plugin_VideoOGL/Src/Config.cpp | 6 ++-- Source/Plugins/Plugin_VideoOGL/Src/Config.h | 2 +- Source/Plugins/Plugin_VideoOGL/Src/GLWindow.h | 2 +- .../Plugin_VideoOGL/Src/GUI/ConfigDlg.cpp | 28 ++++++++++++++----- .../Plugin_VideoOGL/Src/GUI/ConfigDlg.h | 4 +-- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 8 +++--- 7 files changed, 33 insertions(+), 19 deletions(-) diff --git a/Source/MusicMod.sln b/Source/MusicMod.sln index 7ee626eeeb..12b35b0661 100644 --- a/Source/MusicMod.sln +++ b/Source/MusicMod.sln @@ -59,7 +59,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dolphin", "Core\DolphinWX\D {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160} = {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160} {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0} - {8D612734-FAA5-4B8A-804F-4DEA2367D495} = {8D612734-FAA5-4B8A-804F-4DEA2367D495} {71B16F46-0B00-4EDA-B253-D6D9D03A215C} = {71B16F46-0B00-4EDA-B253-D6D9D03A215C} {33546D62-7F34-4EA6-A88E-D538B36E16BF} = {33546D62-7F34-4EA6-A88E-D538B36E16BF} {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} @@ -373,7 +372,6 @@ Global {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release JITIL|x64.ActiveCfg = Release|x64 {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release JITIL|x64.Build.0 = Release|x64 {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|Win32.ActiveCfg = Release|Win32 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|Win32.Build.0 = Release|Win32 {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|x64.ActiveCfg = Release|x64 {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|x64.Build.0 = Release|x64 {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Debug|Win32.ActiveCfg = Debug|Win32 diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Config.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Config.cpp index 5f1dc8a400..67fdb3a15b 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Config.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Config.cpp @@ -46,7 +46,8 @@ void Config::Load() iniFile.Get("Hardware", "Fullscreen", &bFullscreen, 0); // Hardware iniFile.Get("Hardware", "RenderToMainframe", &renderToMainframe, false); iniFile.Get("Settings", "StretchToFit", &bStretchToFit, true); - iniFile.Get("Settings", "KeepAR", &bKeepAR, false); + iniFile.Get("Settings", "KeepAR_4_3", &bKeepAR43, false); + iniFile.Get("Settings", "KeepAR_16_9", &bKeepAR169, false); iniFile.Get("Settings", "HideCursor", &bHideCursor, false); @@ -96,7 +97,8 @@ void Config::Save() iniFile.Set("Hardware", "Fullscreen", bFullscreen); iniFile.Set("Hardware", "RenderToMainframe", renderToMainframe); iniFile.Set("Settings", "StretchToFit", bStretchToFit); - iniFile.Set("Settings", "KeepAR", bKeepAR); + iniFile.Set("Settings", "KeepAR_4_3", bKeepAR43); + iniFile.Set("Settings", "KeepAR_16_9", bKeepAR169); iniFile.Set("Settings", "HideCursor", bHideCursor); iniFile.Set("Settings", "Backend", iBackend); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Config.h b/Source/Plugins/Plugin_VideoOGL/Src/Config.h index 4dd337e216..b337b3c947 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Config.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/Config.h @@ -41,7 +41,7 @@ struct Config // stretch to fit should be split into two options, I think - one for low resolution backbuffer, // one for ignore aspect ratio. I guess KeepAR sort of does that. Anyway, these should be rethought. bool bStretchToFit; - bool bKeepAR; + bool bKeepAR43, bKeepAR169; bool bHideCursor; bool bSafeTextureCache; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GLWindow.h b/Source/Plugins/Plugin_VideoOGL/Src/GLWindow.h index e56e1bc265..198ff9b7cd 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GLWindow.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/GLWindow.h @@ -130,7 +130,7 @@ public: &currWinRes.x, &currWinRes.y); SetProperty(OGL_FULLSCREEN, g_Config.bFullscreen); - SetProperty(OGL_KEEPRATIO, g_Config.bKeepAR); + SetProperty(OGL_KEEPRATIO, g_Config.bKeepAR43); SetProperty(OGL_HIDECURSOR, g_Config.bHideCursor); updateDim(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.cpp b/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.cpp index d9236a29f6..feaa783e85 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.cpp @@ -35,7 +35,8 @@ BEGIN_EVENT_TABLE(ConfigDialog,wxDialog) EVT_CHOICE(ID_MAXANISOTROPY, ConfigDialog::GeneralSettingsChanged) EVT_CHECKBOX(ID_FORCEFILTERING, ConfigDialog::GeneralSettingsChanged) EVT_CHECKBOX(ID_STRETCHTOFIT, ConfigDialog::GeneralSettingsChanged) - EVT_CHECKBOX(ID_KEEPAR, ConfigDialog::GeneralSettingsChanged) + EVT_CHECKBOX(ID_KEEPAR_4_3, ConfigDialog::GeneralSettingsChanged) + EVT_CHECKBOX(ID_KEEPAR_16_9, ConfigDialog::GeneralSettingsChanged) #ifndef _WIN32 EVT_CHECKBOX(ID_HIDECURSOR, ConfigDialog::GeneralSettingsChanged) #endif @@ -166,9 +167,13 @@ void ConfigDialog::CreateGUIControls() m_RenderToMainWindow = new wxCheckBox(m_PageGeneral, ID_RENDERTOMAINWINDOW, wxT("Render to main window"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); m_RenderToMainWindow->SetValue(g_Config.renderToMainframe); m_StretchToFit = new wxCheckBox(m_PageGeneral, ID_STRETCHTOFIT, wxT("Stretch to fit"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + m_KeepAR43 = new wxCheckBox(m_PageGeneral, ID_KEEPAR_4_3, wxT("Keep 4:3 aspect ratio"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + m_KeepAR169 = new wxCheckBox(m_PageGeneral, ID_KEEPAR_16_9, wxT("Keep 16:9 aspect ratio"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + + // Default values m_StretchToFit->SetValue(g_Config.bStretchToFit); - m_KeepAR = new wxCheckBox(m_PageGeneral, ID_KEEPAR, wxT("Keep 4:3 aspect ratio"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - m_KeepAR->SetValue(g_Config.bKeepAR); + m_KeepAR43->SetValue(g_Config.bKeepAR43); + m_KeepAR169->SetValue(g_Config.bKeepAR169); #ifndef _WIN32 m_HideCursor = new wxCheckBox(m_PageGeneral, ID_HIDECURSOR, wxT("Hide mouse cursor"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); @@ -231,7 +236,8 @@ void ConfigDialog::CreateGUIControls() sBasic->Add(m_Fullscreen, wxGBPosition(0, 0), wxGBSpan(1, 2), wxALL, 5); sBasic->Add(m_RenderToMainWindow, wxGBPosition(1, 0), wxGBSpan(1, 2), wxALL, 5); sBasic->Add(m_StretchToFit, wxGBPosition(2, 0), wxGBSpan(1, 2), wxALL, 5); - sBasic->Add(m_KeepAR, wxGBPosition(3, 0), wxGBSpan(1, 2), wxALL, 5); + sBasic->Add(m_KeepAR43, wxGBPosition(3, 0), wxGBSpan(1, 1), wxALL, 5); + sBasic->Add(m_KeepAR169, wxGBPosition(3, 1), wxGBSpan(1, 1), wxALL, 5); #ifndef _WIN32 sBasic->Add(m_HideCursor, wxGBPosition(4, 0), wxGBSpan(1, 2), wxALL, 5); sBasic->Add(FSText, wxGBPosition(5, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); @@ -424,8 +430,15 @@ void ConfigDialog::GeneralSettingsChanged(wxCommandEvent& event) case ID_STRETCHTOFIT: g_Config.bStretchToFit = m_StretchToFit->IsChecked(); break; - case ID_KEEPAR: - g_Config.bKeepAR = m_KeepAR->IsChecked(); + case ID_KEEPAR_4_3: + g_Config.bKeepAR43 = m_KeepAR43->IsChecked(); + // Don't allow both at the same time + if (g_Config.bKeepAR43) { g_Config.bKeepAR169 = false; m_KeepAR169->SetValue(false); } + break; + case ID_KEEPAR_16_9: + g_Config.bKeepAR169 = m_KeepAR169->IsChecked(); + // Don't allow both at the same time + if (g_Config.bKeepAR169) { g_Config.bKeepAR43 = false; m_KeepAR43->SetValue(false); } break; #ifndef _WIN32 case ID_HIDECURSOR: @@ -544,7 +557,8 @@ void ConfigDialog::TexturePathChange(wxFileDirPickerEvent& event) void ConfigDialog::UpdateGUI() { // This option is only compatible with the Strech To Fit option - m_KeepAR->Enable(g_Config.bStretchToFit); + m_KeepAR43->Enable(g_Config.bStretchToFit); + m_KeepAR169->Enable(g_Config.bStretchToFit); // These options are for the separate rendering window m_Fullscreen->Enable(!g_Config.renderToMainframe); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.h b/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.h index b66007751c..c4d0c3de59 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.h @@ -78,7 +78,7 @@ class ConfigDialog : public wxDialog wxCheckBox *m_Fullscreen; wxCheckBox *m_RenderToMainWindow; wxCheckBox *m_StretchToFit; - wxCheckBox *m_KeepAR; + wxCheckBox *m_KeepAR43, *m_KeepAR169; #ifndef _WIN32 wxCheckBox *m_HideCursor; #endif @@ -129,7 +129,7 @@ class ConfigDialog : public wxDialog ID_FULLSCREEN, ID_RENDERTOMAINWINDOW, ID_STRETCHTOFIT, - ID_KEEPAR, + ID_KEEPAR_4_3, ID_KEEPAR_16_9, ID_HIDECURSOR, ID_FSTEXT, ID_FULLSCREENCB, diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index b6e2cda6fc..b67b02c9e6 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -851,14 +851,14 @@ void Renderer::Swap(const TRectangle& rc) // The rendering window size float WinWidth = (float)OpenGL_GetWidth(); float WinHeight = (float)OpenGL_GetHeight(); - // The rendering window aspect ratio as a fraction of the 4:3 ratio - float Ratio = WinWidth / WinHeight / (4.0f / 3.0f); + // The rendering window aspect ratio as a proportion of the 4:3 or 16:9 ratio + float Ratio = WinWidth / WinHeight / (g_Config.bKeepAR43 ? (4.0f / 3.0f) : (16.0f / 9.0f)); float wAdj, hAdj; // Actual pixel size of the picture after adjustment float PictureWidth = WinWidth, PictureHeight = WinHeight; // This function currently only works together with the Stretch To Fit option - if (g_Config.bKeepAR && g_Config.bStretchToFit) + if ((g_Config.bKeepAR43 || g_Config.bKeepAR169) && g_Config.bStretchToFit) { // Check if height or width is the limiting factor. If ratio > 1 the picture is to wide and have to limit the width. if (Ratio > 1) @@ -992,7 +992,7 @@ void Renderer::Swap(const TRectangle& rc) has been filled with either for example white, or have copies of old renderings on it. So we replace that with blacknes. */ // -------------------- - if(g_Config.bKeepAR) + if(g_Config.bKeepAR43) { // Set current drawing color to red glColor3f(0.0, 0.0, 0.0); // Black