diff --git a/GPU/GLES/TextureCache.cpp b/GPU/GLES/TextureCache.cpp index 0653b0e2b5..c99711479c 100644 --- a/GPU/GLES/TextureCache.cpp +++ b/GPU/GLES/TextureCache.cpp @@ -1437,7 +1437,12 @@ void TextureCache::LoadTextureLevel(TexCacheEntry &entry, int level, bool replac glPixelStorei(GL_UNPACK_ALIGNMENT, texByteAlign); glPixelStorei(GL_PACK_ALIGNMENT, texByteAlign); - int scaleFactor = g_Config.iTexScalingLevel; + int scaleFactor; + //Auto-texture scale upto 5x rendering resolution + if (g_Config.iTexScalingLevel == 0) + scaleFactor = std::min(5, g_Config.iInternalResolution); + else + scaleFactor = g_Config.iTexScalingLevel; // Don't scale the PPGe texture. if (entry.addr > 0x05000000 && entry.addr < 0x08800000) diff --git a/Windows/WndMainWindow.cpp b/Windows/WndMainWindow.cpp index 2770457751..284e383a9d 100644 --- a/Windows/WndMainWindow.cpp +++ b/Windows/WndMainWindow.cpp @@ -237,6 +237,9 @@ namespace MainWindow if (++g_Config.iInternalResolution > RESOLUTION_MAX) g_Config.iInternalResolution = 0; } + + if (g_Config.iTexScalingLevel == TEXSCALING_AUTO) + setTexScalingMultiplier(0); ResizeDisplay(true, true); } @@ -1211,7 +1214,8 @@ namespace MainWindow if (gpu) gpu->Resized(); break; - + + case ID_TEXTURESCALING_AUTO: setTexScalingMultiplier(TEXSCALING_AUTO); break; case ID_TEXTURESCALING_OFF: setTexScalingMultiplier(TEXSCALING_OFF); break; case ID_TEXTURESCALING_2X: setTexScalingMultiplier(TEXSCALING_2X); break; case ID_TEXTURESCALING_3X: setTexScalingMultiplier(TEXSCALING_3X); break; @@ -1640,20 +1644,21 @@ namespace MainWindow } static const int texscalingitems[] = { + ID_TEXTURESCALING_AUTO, ID_TEXTURESCALING_OFF, ID_TEXTURESCALING_2X, ID_TEXTURESCALING_3X, ID_TEXTURESCALING_4X, ID_TEXTURESCALING_5X, }; - if(g_Config.iTexScalingLevel < TEXSCALING_OFF) - g_Config.iTexScalingLevel = TEXSCALING_OFF; + if(g_Config.iTexScalingLevel < TEXSCALING_AUTO) + g_Config.iTexScalingLevel = TEXSCALING_AUTO; else if(g_Config.iTexScalingLevel > TEXSCALING_MAX) g_Config.iTexScalingLevel = TEXSCALING_MAX; for (int i = 0; i < ARRAY_SIZE(texscalingitems); i++) { - CheckMenuItem(menu, texscalingitems[i], MF_BYCOMMAND | ((i == g_Config.iTexScalingLevel - 1) ? MF_CHECKED : MF_UNCHECKED)); + CheckMenuItem(menu, texscalingitems[i], MF_BYCOMMAND | ((i == g_Config.iTexScalingLevel) ? MF_CHECKED : MF_UNCHECKED)); } static const int texscalingtypeitems[] = { diff --git a/Windows/WndMainWindow.h b/Windows/WndMainWindow.h index 2a784a9f5a..36e0500949 100644 --- a/Windows/WndMainWindow.h +++ b/Windows/WndMainWindow.h @@ -39,7 +39,8 @@ namespace MainWindow RESOLUTION_8X = 8, RESOLUTION_9X = 9, RESOLUTION_MAX = 10, - + + TEXSCALING_AUTO = 0, TEXSCALING_OFF = 1, TEXSCALING_2X = 2, TEXSCALING_3X = 3, @@ -65,4 +66,5 @@ namespace MainWindow void _ViewFullScreen(HWND hWnd); void _ViewNormal(HWND hWnd); void TranslateMenus(); + void setTexScalingMultiplier(int level); } diff --git a/Windows/ppsspp.rc b/Windows/ppsspp.rc index d6ba42d7fa..a06f82dbe2 100644 --- a/Windows/ppsspp.rc +++ b/Windows/ppsspp.rc @@ -472,6 +472,7 @@ BEGIN POPUP "Texture Scaling" BEGIN MENUITEM "Off", ID_TEXTURESCALING_OFF + MENUITEM "Auto", ID_TEXTURESCALING_AUTO MENUITEM "&2x", ID_TEXTURESCALING_2X MENUITEM "&3x", ID_TEXTURESCALING_3X MENUITEM "&4x", ID_TEXTURESCALING_4X diff --git a/Windows/resource.h b/Windows/resource.h index 0269e138ba..040c97878c 100644 --- a/Windows/resource.h +++ b/Windows/resource.h @@ -293,6 +293,7 @@ #define IDC_GEDBG_STEPTEX 40133 #define IDC_GEDBG_STEPFRAME 40134 #define IDC_GEDBG_BREAKTEX 40135 +#define ID_TEXTURESCALING_AUTO 40136 // Dummy option to let the buffered rendering hotkey cycle through all the options. #define ID_OPTIONS_BUFFEREDRENDERINGDUMMY 40500