diff --git a/Core/Config.cpp b/Core/Config.cpp index 60529a4f67..e0ea8cff4e 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -60,6 +60,7 @@ void CConfig::Load(const char *iniFileName) graphics->Get("WindowZoom", &iWindowZoom, 1); graphics->Get("BufferedRendering", &bBufferedRendering, true); graphics->Get("HardwareTransform", &bHardwareTransform, false); + graphics->Get("LinearFiltering", &bLinearFiltering, false); IniFile::Section *sound = iniFile.GetOrCreateSection("Sound"); sound->Get("Enable", &bEnableSound, true); @@ -98,6 +99,7 @@ void CConfig::Save() graphics->Set("WindowZoom", iWindowZoom); graphics->Set("BufferedRendering", bBufferedRendering); graphics->Set("HardwareTransform", bHardwareTransform); + graphics->Set("LinearFiltering", bLinearFiltering); IniFile::Section *sound = iniFile.GetOrCreateSection("Sound"); sound->Set("Enable", bEnableSound); diff --git a/Core/Config.h b/Core/Config.h index ae9ea5191a..030d3ea8c1 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -52,6 +52,7 @@ public: bool bHardwareTransform; bool bBufferedRendering; bool bDrawWireframe; + bool bLinearFiltering; int iWindowZoom; // for Windows // Sound diff --git a/GPU/GLES/TextureCache.cpp b/GPU/GLES/TextureCache.cpp index 1b867a46d4..3e13c466e3 100644 --- a/GPU/GLES/TextureCache.cpp +++ b/GPU/GLES/TextureCache.cpp @@ -21,7 +21,7 @@ #include "../ge_constants.h" #include "../GPUState.h" #include "TextureCache.h" - +#include "../Core/Config.h" // If a texture hasn't been seen for 200 frames, get rid of it. #define TEXTURE_KILL_AGE 200 @@ -428,8 +428,17 @@ void UpdateSamplingParams() int tClamp = (gstate.texwrap>>8) & 1; glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, sClamp ? GL_CLAMP_TO_EDGE : GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, tClamp ? GL_CLAMP_TO_EDGE : GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilt ? GL_LINEAR : GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilt ? GL_LINEAR : GL_NEAREST); + // Tested mag/minFilt only work in either one case that can allow GL_LINEAR to be enable + //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilt ? GL_LINEAR : GL_NEAREST); + //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilt ? GL_LINEAR : GL_NEAREST); + // User define linear filtering + if ( g_Config.bLinearFiltering ) { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + } else { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + } }