From 5d275d7fe90a910e7aec29cb396006b787208666 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 30 Jun 2013 14:48:50 +0800 Subject: [PATCH] Consolildate Texture filtering option --- Core/Config.cpp | 8 ++------ Core/Config.h | 4 +--- GPU/GLES/Framebuffer.cpp | 2 +- GPU/GLES/TextureCache.cpp | 4 ++-- UI/GameSettingsScreen.cpp | 3 --- UI/MenuScreens.cpp | 36 ++++++++++++++++++++++++++---------- Windows/WndMainWindow.cpp | 27 +++++++++++++++++++-------- Windows/ppsspp.rc | Bin 40510 -> 40462 bytes 8 files changed, 51 insertions(+), 33 deletions(-) diff --git a/Core/Config.cpp b/Core/Config.cpp index 1e59ba28cd..2922fd7546 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -98,9 +98,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("LinearFilteringCG", &bLinearFilteringCG, false); + graphics->Get("TextureFiltering", &iTexFiltering, false); graphics->Get("SSAA", &SSAntiAliasing, 0); graphics->Get("VBO", &bUseVBO, false); graphics->Get("FrameSkip", &iFrameSkip, 0); @@ -215,9 +213,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("LinearFilteringCG", bLinearFilteringCG); + graphics->Set("TextureFiltering", iTexFiltering); graphics->Set("SSAA", SSAntiAliasing); graphics->Set("VBO", bUseVBO); graphics->Set("FrameSkip", iFrameSkip); diff --git a/Core/Config.h b/Core/Config.h index d790965ab1..5035975dc9 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -63,9 +63,7 @@ public: bool bDisplayFramebuffer; bool bHardwareTransform; bool bBufferedRendering; - bool bNearestFiltering; - bool bLinearFiltering; - bool bLinearFilteringCG; + int iTexFiltering; // 1 = off , 2 = nearest , 3 = linear , 4 = linear(CG) bool bUseVBO; #ifdef BLACKBERRY bool bPartialStretch; diff --git a/GPU/GLES/Framebuffer.cpp b/GPU/GLES/Framebuffer.cpp index 9f345ae354..ea50ffd941 100644 --- a/GPU/GLES/Framebuffer.cpp +++ b/GPU/GLES/Framebuffer.cpp @@ -246,7 +246,7 @@ void FramebufferManager::DrawPixels(const u8 *framebuf, int pixelFormat, int lin } glBindTexture(GL_TEXTURE_2D,drawPixelsTex_); - if (g_Config.bLinearFiltering || (g_Config.bLinearFilteringCG && g_iNumVideos)) + if (g_Config.iTexFiltering == 3 || (g_Config.iTexFiltering == 4 && g_iNumVideos)) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } diff --git a/GPU/GLES/TextureCache.cpp b/GPU/GLES/TextureCache.cpp index a72b5446f4..df4c778576 100644 --- a/GPU/GLES/TextureCache.cpp +++ b/GPU/GLES/TextureCache.cpp @@ -511,12 +511,12 @@ void TextureCache::UpdateSamplingParams(TexCacheEntry &entry, bool force) { } } - if ((g_Config.bLinearFiltering || (g_Config.bLinearFilteringCG && g_iNumVideos)) && !gstate.isColorTestEnabled()) { + if ((g_Config.iTexFiltering == 3 || (g_Config.iTexFiltering == 4 && g_iNumVideos)) && !gstate.isColorTestEnabled()) { magFilt |= 1; minFilt |= 1; } - if (g_Config.bNearestFiltering) { + if (g_Config.iTexFiltering == 2) { magFilt &= ~1; minFilt &= ~1; } diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp index d70a1279ca..3e174cb6ef 100644 --- a/UI/GameSettingsScreen.cpp +++ b/UI/GameSettingsScreen.cpp @@ -58,9 +58,6 @@ 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("Force Nearest Filtering"))); - graphicsSettings->Add(new CheckBox(&g_Config.bLinearFiltering, gs->T("Force Linear Filtering"))); - graphicsSettings->Add(new CheckBox(&g_Config.bLinearFilteringCG, gs->T("Linear Filtering (CG)"))); graphicsSettings->Add(new CheckBox(&g_Config.bStretchToDisplay, gs->T("Stretch to Display"))); graphicsSettings->Add(new CheckBox(&g_Config.bBufferedRendering, gs->T("Buffered Rendering"))); graphicsSettings->Add(new CheckBox(&g_Config.bDisplayFramebuffer, gs->T("Display Raw Framebuffer"))); diff --git a/UI/MenuScreens.cpp b/UI/MenuScreens.cpp index 5751964ff7..758de727ab 100644 --- a/UI/MenuScreens.cpp +++ b/UI/MenuScreens.cpp @@ -510,7 +510,6 @@ void PauseScreen::render() { } else g_Config.iFrameSkip = 0; - UICheckBox(GEN_ID, x, y += stride, gs->T("Linear Filtering"), ALIGN_TOPLEFT, &g_Config.bLinearFiltering); ui_draw2d.DrawText(UBUNTU24, gs->T("Save State :"), 30, y += 40, 0xFFFFFFFF, ALIGN_LEFT); HLinear hlinear4(x + 180 , y , 10); if (UIButton(GEN_ID, hlinear4, 60, 0, "1", ALIGN_LEFT)) { @@ -857,14 +856,6 @@ void GraphicsScreenP2::render() { int stride = 40; int columnw = 400; - if ( UICheckBox(GEN_ID, x, y += stride, gs->T("Force Nearest Filtering"), ALIGN_TOPLEFT, &g_Config.bNearestFiltering) ) { - g_Config.bLinearFiltering = false; // disable linear filtering if someone turns on nearest - } - if ( UICheckBox(GEN_ID, x, y += stride, gs->T("Force Linear Filtering"), ALIGN_TOPLEFT, &g_Config.bLinearFiltering) ) { - g_Config.bNearestFiltering = false; // and vice versa - } - UICheckBox(GEN_ID, x, y += stride, gs->T("Linear Filtering (CG)"), ALIGN_TOPLEFT, &g_Config.bLinearFilteringCG); - bool AnisotropicFiltering = g_Config.iAnisotropyLevel != 0; UICheckBox(GEN_ID, x, y += stride, gs->T("Anisotropic Filtering"), ALIGN_TOPLEFT, &AnisotropicFiltering); if (AnisotropicFiltering) { @@ -888,9 +879,34 @@ void GraphicsScreenP2::render() { } else g_Config.iAnisotropyLevel = 0; + bool TexFiltering = g_Config.iTexFiltering > 1; + UICheckBox(GEN_ID, x, y += stride, gs->T("Texture Filtering"), ALIGN_TOPLEFT, &TexFiltering); + if (TexFiltering) { + if (g_Config.iTexFiltering <= 1) + g_Config.iTexFiltering = 2; + + char showType[256]; + std::string type; + switch (g_Config.iTexFiltering) { + case 2: type = "Nearest";break; + case 3: type = "Linear";break; + case 4: type = "Linear(CG)";break; + } + sprintf(showType, "%s %s", gs->T("Type :"), type.c_str()); + ui_draw2d.DrawText(UBUNTU24, showType, x + 60, (y += stride) , 0xFFFFFFFF, ALIGN_LEFT); + HLinear hlinear1(x + 300, y, 20); + if (UIButton(GEN_ID, hlinear1, 120, 0, gs->T("Nearest"), ALIGN_LEFT)) + g_Config.iTexFiltering = 2; + if (UIButton(GEN_ID, hlinear1, 120, 0, gs->T("Linear"), ALIGN_LEFT)) + g_Config.iTexFiltering = 3; + if (UIButton(GEN_ID, hlinear1, 150, 0, gs->T("Linear(CG)"), ALIGN_LEFT)) + g_Config.iTexFiltering = 4; + y += 20; + } else + g_Config.iTexFiltering = 0; bool TexScaling = g_Config.iTexScalingLevel > 1; - UICheckBox(GEN_ID, x, y += stride, gs->T("xBRZ Texture Scaling"), ALIGN_TOPLEFT, &TexScaling); + UICheckBox(GEN_ID, x, y += stride, gs->T("Texture Scaling"), ALIGN_TOPLEFT, &TexScaling); if (TexScaling) { if (g_Config.iTexScalingLevel <= 1) g_Config.iTexScalingLevel = 2; diff --git a/Windows/WndMainWindow.cpp b/Windows/WndMainWindow.cpp index 5983677ffc..b486bbd602 100644 --- a/Windows/WndMainWindow.cpp +++ b/Windows/WndMainWindow.cpp @@ -203,13 +203,20 @@ namespace MainWindow g_Config.iTexScalingLevel = num; if(gpu) gpu->ClearCacheNextFrame(); } + + void setTexFiltering(int num) { + g_Config.iTexFiltering = num; + } + void setTexScalingType(int num) { g_Config.iTexScalingType = num; if(gpu) gpu->ClearCacheNextFrame(); } + void setFpsLimit(int fps) { g_Config.iFpsLimit = fps; } + void enableCheats(bool cheats){ g_Config.bEnableCheats = cheats; } @@ -738,15 +745,13 @@ namespace MainWindow g_Config.bUseVBO = !g_Config.bUseVBO; break; case ID_OPTIONS_NEARESTFILTERING: - g_Config.bNearestFiltering = !g_Config.bNearestFiltering; - g_Config.bLinearFiltering = false; + setTexFiltering(2) ; break; case ID_OPTIONS_LINEARFILTERING: - g_Config.bNearestFiltering = false; - g_Config.bLinearFiltering = !g_Config.bLinearFiltering; + setTexFiltering(3) ; break; case ID_OPTIONS_LINEARFILTERING_CG: - g_Config.bLinearFilteringCG = !g_Config.bLinearFilteringCG; + setTexFiltering(4) ; break; case ID_OPTIONS_TOPMOST: g_Config.bTopMost = !g_Config.bTopMost; @@ -903,9 +908,6 @@ 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_LINEARFILTERING_CG, g_Config.bLinearFilteringCG); CHECKITEM(ID_OPTIONS_SIMPLE2XSSAA, g_Config.SSAntiAliasing); CHECKITEM(ID_OPTIONS_STRETCHDISPLAY, g_Config.bStretchToDisplay); CHECKITEM(ID_EMULATION_RUNONLOAD, g_Config.bAutoRun); @@ -950,6 +952,15 @@ namespace MainWindow CheckMenuItem(menu, texscalingtypeitems[i], MF_BYCOMMAND | ((i == g_Config.iTexScalingType) ? MF_CHECKED : MF_UNCHECKED)); } + static const int texfilteringitems[] = { + ID_OPTIONS_NEARESTFILTERING, + ID_OPTIONS_LINEARFILTERING, + ID_OPTIONS_LINEARFILTERING_CG, + }; + for (int i = 0; i < 3; i++) { + CheckMenuItem(menu, texfilteringitems[i], MF_BYCOMMAND | ((i == g_Config.iTexFiltering-2) ? MF_CHECKED : MF_UNCHECKED)); + } + UpdateCommands(); } diff --git a/Windows/ppsspp.rc b/Windows/ppsspp.rc index 90769761b6fd49ddab321a62705caa5402e645aa..6959deb398e796dc6c0fb76e1657356bba6ccf9e 100644 GIT binary patch delta 181 zcmdnDhpBH5(+0ho&2n`WjLe)2oRgQ9kjjwAPy{54 z8A=$G7<51~VA+Yn;*)!7RG?}n7Dok0`B X5CW1CbdFxjV0W%8Ly6?Ih2K0w8JPy^7lD#ElH)XPmiQK_McQ!&_(bfDcD49*Ph e44RWa<|%^gG^p2@d@WUFvtCUF