From 9fec876e3240ac3503db748e0f7d9094e86a5602 Mon Sep 17 00:00:00 2001 From: Jonas Kulla Date: Sun, 23 Apr 2017 12:28:34 +0200 Subject: [PATCH] Config: Add "maxTextureSize" entry to artificially limit texture sizes --- mkxp.conf.sample | 11 +++++++++++ src/config.cpp | 1 + src/config.h | 1 + src/glstate.cpp | 6 +++++- src/glstate.h | 4 +++- src/sharedstate.cpp | 1 + 6 files changed, 22 insertions(+), 2 deletions(-) diff --git a/mkxp.conf.sample b/mkxp.conf.sample index b88f216..0062451 100644 --- a/mkxp.conf.sample +++ b/mkxp.conf.sample @@ -124,6 +124,17 @@ # subImageFix=false +# Limit the maximum size (width, height) of +# most textures mkxp will create (exceptions are +# rendering backbuffers and similar). +# If set to 0, the hardware maximum is used. +# This is useful for recording traces that can +# be played back on machines with lower specs. +# (default: 0) +# +# maxTextureSize=0 + + # Set the base path of the game to '/path/to/game' # (default: executable directory) # diff --git a/src/config.cpp b/src/config.cpp index a58ddab..0fab180 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -166,6 +166,7 @@ void Config::read(int argc, char *argv[]) PO_DESC(syncToRefreshrate, bool, false) \ PO_DESC(solidFonts, bool, false) \ PO_DESC(subImageFix, bool, false) \ + PO_DESC(maxTextureSize, int, 0) \ PO_DESC(gameFolder, std::string, ".") \ PO_DESC(anyAltToggleFS, bool, false) \ PO_DESC(enableReset, bool, true) \ diff --git a/src/config.h b/src/config.h index d82698d..f6dc2c4 100644 --- a/src/config.h +++ b/src/config.h @@ -49,6 +49,7 @@ struct Config bool solidFonts; bool subImageFix; + int maxTextureSize; std::string gameFolder; bool anyAltToggleFS; diff --git a/src/glstate.cpp b/src/glstate.cpp index 73aec31..ff88de7 100644 --- a/src/glstate.cpp +++ b/src/glstate.cpp @@ -23,6 +23,7 @@ #include "shader.h" #include "etc.h" #include "gl-fun.h" +#include "config.h" #include @@ -111,7 +112,7 @@ GLState::Caps::Caps() gl.GetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize); } -GLState::GLState() +GLState::GLState(const Config &conf) { gl.Disable(GL_DEPTH_TEST); @@ -121,4 +122,7 @@ GLState::GLState() scissorTest.init(false); scissorBox.init(IntRect(0, 0, 640, 480)); program.init(0); + + if (conf.maxTextureSize > 0) + caps.maxTexSize = conf.maxTextureSize; } diff --git a/src/glstate.h b/src/glstate.h index 63b0bcb..02830e6 100644 --- a/src/glstate.h +++ b/src/glstate.h @@ -27,6 +27,8 @@ #include #include +struct Config; + template struct GLProperty { @@ -130,7 +132,7 @@ public: } caps; - GLState(); + GLState(const Config &conf); }; #endif // GLSTATE_H diff --git a/src/sharedstate.cpp b/src/sharedstate.cpp index 9872af7..0778da9 100644 --- a/src/sharedstate.cpp +++ b/src/sharedstate.cpp @@ -109,6 +109,7 @@ struct SharedStatePrivate graphics(threadData), input(*threadData), audio(*threadData), + _glState(threadData->config), fontState(threadData->config), stampCounter(0) {