diff --git a/Core/Config.cpp b/Core/Config.cpp index dc273895b3..18c4c9504f 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -96,6 +96,7 @@ void Config::Load(const char *iniFileName) #endif graphics->Get("BufferedRendering", &bBufferedRendering, true); graphics->Get("HardwareTransform", &bHardwareTransform, true); + graphics->Get("NearestFiltering", &bNearestFiltering, false); graphics->Get("LinearFiltering", &bLinearFiltering, false); graphics->Get("SSAA", &SSAntiAliasing, 0); graphics->Get("VBO", &bUseVBO, false); @@ -201,6 +202,7 @@ void Config::Save() graphics->Set("ResolutionScale", iWindowZoom); graphics->Set("BufferedRendering", bBufferedRendering); graphics->Set("HardwareTransform", bHardwareTransform); + graphics->Set("NearestFiltering", bNearestFiltering); graphics->Set("LinearFiltering", bLinearFiltering); graphics->Set("SSAA", SSAntiAliasing); graphics->Set("VBO", bUseVBO); diff --git a/Core/Config.h b/Core/Config.h index 7fbd525e65..c9bbc5d18d 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -61,6 +61,7 @@ public: bool bDisplayFramebuffer; bool bHardwareTransform; bool bBufferedRendering; + bool bNearestFiltering; bool bLinearFiltering; bool bUseVBO; #ifdef BLACKBERRY10 diff --git a/GPU/GLES/TextureCache.cpp b/GPU/GLES/TextureCache.cpp index 39984d410c..cee9291732 100644 --- a/GPU/GLES/TextureCache.cpp +++ b/GPU/GLES/TextureCache.cpp @@ -511,6 +511,11 @@ void TextureCache::UpdateSamplingParams(TexCacheEntry &entry, bool force) { minFilt |= 1; } + if (g_Config.bNearestFiltering) { + magFilt &= 0xFFFFFFFE; + minFilt &= 0xFFFFFFFE; + } + if (!g_Config.bMipMap) { magFilt &= 1; minFilt &= 1; diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp index af739fb773..16c102743d 100644 --- a/UI/GameSettingsScreen.cpp +++ b/UI/GameSettingsScreen.cpp @@ -56,6 +56,7 @@ void GameSettingsScreen::CreateViews() { ViewGroup *graphicsSettings = new LinearLayout(ORIENT_VERTICAL); graphicsSettingsScroll->Add(graphicsSettings); tabHolder->AddTab("Graphics", graphicsSettingsScroll); + graphicsSettings->Add(new CheckBox(&g_Config.bNearestFiltering, gs->T("Nearest Filtering"))); graphicsSettings->Add(new CheckBox(&g_Config.bLinearFiltering, gs->T("Linear Filtering"))); graphicsSettings->Add(new CheckBox(&g_Config.bStretchToDisplay, gs->T("Stretch to Display"))); graphicsSettings->Add(new CheckBox(&g_Config.bBufferedRendering, gs->T("Buffered Rendering"))); diff --git a/UI/MenuScreens.cpp b/UI/MenuScreens.cpp index f76c87d95f..5e081fd9e5 100644 --- a/UI/MenuScreens.cpp +++ b/UI/MenuScreens.cpp @@ -831,6 +831,7 @@ void GraphicsScreenP2::render() { int stride = 40; int columnw = 400; + UICheckBox(GEN_ID, x, y += stride, gs->T("Nearest Filtering"), ALIGN_TOPLEFT, &g_Config.bNearestFiltering); UICheckBox(GEN_ID, x, y += stride, gs->T("Linear Filtering"), ALIGN_TOPLEFT, &g_Config.bLinearFiltering); bool AnisotropicFiltering = g_Config.iAnisotropyLevel != 0; diff --git a/Windows/WndMainWindow.cpp b/Windows/WndMainWindow.cpp index 34a0176c77..30b107f124 100644 --- a/Windows/WndMainWindow.cpp +++ b/Windows/WndMainWindow.cpp @@ -737,7 +737,12 @@ namespace MainWindow case ID_OPTIONS_USEVBO: g_Config.bUseVBO = !g_Config.bUseVBO; break; + case ID_OPTIONS_NEARESTFILTERING: + g_Config.bNearestFiltering = !g_Config.bNearestFiltering; + g_Config.bLinearFiltering = false; + break; case ID_OPTIONS_LINEARFILTERING: + g_Config.bNearestFiltering = false; g_Config.bLinearFiltering = !g_Config.bLinearFiltering; break; case ID_OPTIONS_TOPMOST: @@ -892,6 +897,7 @@ namespace MainWindow CHECKITEM(ID_OPTIONS_SHOWDEBUGSTATISTICS, g_Config.bShowDebugStats); CHECKITEM(ID_OPTIONS_HARDWARETRANSFORM, g_Config.bHardwareTransform); CHECKITEM(ID_OPTIONS_FASTMEMORY, g_Config.bFastMemory); + CHECKITEM(ID_OPTIONS_NEARESTFILTERING, g_Config.bNearestFiltering); CHECKITEM(ID_OPTIONS_LINEARFILTERING, g_Config.bLinearFiltering); CHECKITEM(ID_OPTIONS_SIMPLE2XSSAA, g_Config.SSAntiAliasing); CHECKITEM(ID_OPTIONS_STRETCHDISPLAY, g_Config.bStretchToDisplay); diff --git a/Windows/ppsspp.rc b/Windows/ppsspp.rc index 8520b2b3e5..90612905d6 100644 Binary files a/Windows/ppsspp.rc and b/Windows/ppsspp.rc differ diff --git a/Windows/resource.h b/Windows/resource.h index e508cf6a72..328dd7e8a2 100644 Binary files a/Windows/resource.h and b/Windows/resource.h differ