From a3e9316438c1f7ef40278d108ea888ffef8600cc Mon Sep 17 00:00:00 2001 From: Splendide Imaginarius <119545140+Splendide-Imaginarius@users.noreply.github.com> Date: Wed, 22 Nov 2023 20:22:34 +0000 Subject: [PATCH] Allow tuning bicubic sharpness --- mkxp.json | 8 ++++++++ src/config.cpp | 2 ++ src/config.h | 1 + src/display/gl/gl-meta.cpp | 1 + src/display/gl/shader.cpp | 6 ++++-- src/display/gl/shader.h | 2 ++ 6 files changed, 18 insertions(+), 2 deletions(-) diff --git a/mkxp.json b/mkxp.json index 78f37212..73c7b03d 100644 --- a/mkxp.json +++ b/mkxp.json @@ -88,6 +88,14 @@ // "smoothScaling": 0, + // Sharpness when using Bicubic scaling. + // A good starting range is 0 to 100, + // but you may wish to go outside that range in either direction. + // (default: 100) + // + // "bicubicSharpness": 100, + + // Replace the game's Bitmap files with external high-res files // provided in the "Hires" directory. // (You'll also need to set the below Scaling Factors.) diff --git a/src/config.cpp b/src/config.cpp index 7e400834..77eb51a8 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -135,6 +135,7 @@ void Config::read(int argc, char *argv[]) { {"fullscreen", false}, {"fixedAspectRatio", true}, {"smoothScaling", 0}, + {"bicubicSharpness", 100}, {"enableHires", false}, {"textureScalingFactor", 1.}, {"framebufferScalingFactor", 1.}, @@ -263,6 +264,7 @@ try { exp } catch (...) {} SET_OPT(fullscreen, boolean); SET_OPT(fixedAspectRatio, boolean); SET_OPT(smoothScaling, integer); + SET_OPT(bicubicSharpness, integer); SET_OPT(enableHires, boolean); SET_OPT(textureScalingFactor, number); SET_OPT(framebufferScalingFactor, number); diff --git a/src/config.h b/src/config.h index bd253f7a..f8a1d719 100644 --- a/src/config.h +++ b/src/config.h @@ -44,6 +44,7 @@ struct Config { bool fullscreen; bool fixedAspectRatio; int smoothScaling; + int bicubicSharpness; bool enableHires; double textureScalingFactor; double framebufferScalingFactor; diff --git a/src/display/gl/gl-meta.cpp b/src/display/gl/gl-meta.cpp index 938429fd..2f710fed 100644 --- a/src/display/gl/gl-meta.cpp +++ b/src/display/gl/gl-meta.cpp @@ -161,6 +161,7 @@ static void _blitBegin(FBO::ID fbo, const Vec2i &size) shader.applyViewportProj(); shader.setTranslation(Vec2i()); shader.setTexSize(Vec2i(size.x, size.y)); + shader.setSharpness(shState->config().bicubicSharpness); } break; diff --git a/src/display/gl/shader.cpp b/src/display/gl/shader.cpp index c90d6715..3947039b 100644 --- a/src/display/gl/shader.cpp +++ b/src/display/gl/shader.cpp @@ -777,9 +777,11 @@ BicubicShader::BicubicShader() GET_U(texOffsetX); GET_U(sourceSize); GET_U(bc); +} - // TODO: Maybe expose this as a setting? - gl.Uniform2f(u_bc, 0.0, 0.5); +void BicubicShader::setSharpness(int sharpness) +{ + gl.Uniform2f(u_bc, 1.f - sharpness * 0.01f, sharpness * 0.005f); } Lanczos3Shader::Lanczos3Shader() diff --git a/src/display/gl/shader.h b/src/display/gl/shader.h index 5dd3dbda..40d02f45 100644 --- a/src/display/gl/shader.h +++ b/src/display/gl/shader.h @@ -346,6 +346,8 @@ class BicubicShader : public Lanczos3Shader public: BicubicShader(); + void setSharpness(int sharpness); + protected: GLint u_bc; };