From 28516c2defb94f62593a43f573f64fc3b6594532 Mon Sep 17 00:00:00 2001 From: Rachael Alexanderson Date: Mon, 10 Dec 2018 14:25:29 -0500 Subject: [PATCH] - split gl_texture_hqresize into two variables - one for mode, one for multiplier. --- src/gameconfigfile.cpp | 89 ++++++++++++++++++ src/r_videoscale.cpp | 2 +- src/textures/hires/hqresize.cpp | 108 +++++++++++----------- src/version.h | 2 +- wadsrc/static/language.enu | 33 ++----- wadsrc/static/menudef.txt | 66 +++++-------- wadsrc/static/zscript/menu/optionmenu.txt | 42 +-------- 7 files changed, 179 insertions(+), 163 deletions(-) diff --git a/src/gameconfigfile.cpp b/src/gameconfigfile.cpp index 2979420f9..3bd34fd15 100644 --- a/src/gameconfigfile.cpp +++ b/src/gameconfigfile.cpp @@ -60,6 +60,8 @@ EXTERN_CVAR (Color, am_fdwallcolor) EXTERN_CVAR (Color, am_cdwallcolor) EXTERN_CVAR (Float, spc_amp) EXTERN_CVAR (Bool, wi_percents) +EXTERN_CVAR (Int, gl_texture_hqresizemode) +EXTERN_CVAR (Int, gl_texture_hqresizemult) FGameConfigFile::FGameConfigFile () { @@ -395,6 +397,93 @@ void FGameConfigFile::DoGlobalSetup () FBaseCVar *var = FindCVar("snd_hrtf", NULL); if (var != NULL) var->ResetToDefault(); } + if (last < 216) + { + FBaseCVar *var = FindCVar("gl_texture_hqresize", NULL); + if (var != NULL) + { + auto v = var->GetGenericRep(CVAR_Int); + switch (v.Int) + { + case 1: + gl_texture_hqresizemode = 1; gl_texture_hqresizemult = 2; + break; + case 2: + gl_texture_hqresizemode = 1; gl_texture_hqresizemult = 3; + break; + case 3: + gl_texture_hqresizemode = 1; gl_texture_hqresizemult = 4; + break; + case 4: + gl_texture_hqresizemode = 2; gl_texture_hqresizemult = 2; + break; + case 5: + gl_texture_hqresizemode = 2; gl_texture_hqresizemult = 3; + break; + case 6: + gl_texture_hqresizemode = 2; gl_texture_hqresizemult = 4; + break; + case 7: + gl_texture_hqresizemode = 3; gl_texture_hqresizemult = 2; + break; + case 8: + gl_texture_hqresizemode = 3; gl_texture_hqresizemult = 3; + break; + case 9: + gl_texture_hqresizemode = 3; gl_texture_hqresizemult = 4; + break; + case 10: + gl_texture_hqresizemode = 4; gl_texture_hqresizemult = 2; + break; + case 11: + gl_texture_hqresizemode = 4; gl_texture_hqresizemult = 3; + break; + case 12: + gl_texture_hqresizemode = 4; gl_texture_hqresizemult = 4; + break; + case 18: + gl_texture_hqresizemode = 4; gl_texture_hqresizemult = 5; + break; + case 19: + gl_texture_hqresizemode = 4; gl_texture_hqresizemult = 6; + break; + case 13: + gl_texture_hqresizemode = 5; gl_texture_hqresizemult = 2; + break; + case 14: + gl_texture_hqresizemode = 5; gl_texture_hqresizemult = 3; + break; + case 15: + gl_texture_hqresizemode = 5; gl_texture_hqresizemult = 4; + break; + case 16: + gl_texture_hqresizemode = 5; gl_texture_hqresizemult = 5; + break; + case 17: + gl_texture_hqresizemode = 5; gl_texture_hqresizemult = 6; + break; + case 20: + gl_texture_hqresizemode = 6; gl_texture_hqresizemult = 2; + break; + case 21: + gl_texture_hqresizemode = 6; gl_texture_hqresizemult = 3; + break; + case 22: + gl_texture_hqresizemode = 6; gl_texture_hqresizemult = 4; + break; + case 23: + gl_texture_hqresizemode = 6; gl_texture_hqresizemult = 5; + break; + case 24: + gl_texture_hqresizemode = 6; gl_texture_hqresizemult = 6; + break; + case 0: + default: + gl_texture_hqresizemode = 0; gl_texture_hqresizemult = 1; + break; + } + } + } } } } diff --git a/src/r_videoscale.cpp b/src/r_videoscale.cpp index 9918def62..95f788135 100644 --- a/src/r_videoscale.cpp +++ b/src/r_videoscale.cpp @@ -78,7 +78,7 @@ namespace } void R_ShowCurrentScaling(); -CUSTOM_CVAR(Float, vid_scalefactor, 1.0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +CUSTOM_CVAR(Float, vid_scalefactor, 1.0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) { setsizeneeded = true; if (self < 0.05 || self > 2.0) diff --git a/src/textures/hires/hqresize.cpp b/src/textures/hires/hqresize.cpp index 01f310ed2..7512be703 100644 --- a/src/textures/hires/hqresize.cpp +++ b/src/textures/hires/hqresize.cpp @@ -45,18 +45,22 @@ #include "parallel_for.h" #include "hwrenderer/textures/hw_material.h" -CUSTOM_CVAR(Int, gl_texture_hqresize, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) +EXTERN_CVAR(Int, gl_texture_hqresizemult) +CUSTOM_CVAR(Int, gl_texture_hqresizemode, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) { - if (self < 0 || self > 24) - { + if (self < 0 || self > 6) self = 0; - } - #ifndef HAVE_MMX - // This is to allow the menu option to work properly so that these filters can be skipped while cycling through them. - if (self == 7) self = 10; - if (self == 8) self = 10; - if (self == 9) self = 6; - #endif + if ((gl_texture_hqresizemult > 4) && (self < 4) && (self > 0)) + gl_texture_hqresizemult = 4; + FMaterial::FlushAll(); +} + +CUSTOM_CVAR(Int, gl_texture_hqresizemult, 1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) +{ + if (self < 1 || self > 6) + self = 1; + if ((self > 4) && (gl_texture_hqresizemode < 4) && (gl_texture_hqresizemode > 0)) + self = 4; FMaterial::FlushAll(); } @@ -385,64 +389,60 @@ unsigned char *FTexture::CreateUpsampledTextureBuffer (unsigned char *inputBuffe if (inputBuffer) { - int type = gl_texture_hqresize; + int type = gl_texture_hqresizemode; + int mult = gl_texture_hqresizemult; outWidth = inWidth; outHeight = inHeight; #ifdef HAVE_MMX // hqNx MMX does not preserve the alpha channel so fall back to C-version for such textures - if (hasAlpha && type > 6 && type <= 9) + if (hasAlpha && type == 3) { - type -= 3; + type = 2; } #endif + if (mult < 2) + type = 0; switch (type) { case 1: - return scaleNxHelper( &scale2x, 2, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + switch(mult) + { + case 2: + return scaleNxHelper( &scale2x, 2, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + case 3: + return scaleNxHelper( &scale3x, 3, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + default: + return scaleNxHelper( &scale4x, 4, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + } case 2: - return scaleNxHelper( &scale3x, 3, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 3: - return scaleNxHelper( &scale4x, 4, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 4: - return hqNxHelper( &hq2x_32, 2, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 5: - return hqNxHelper( &hq3x_32, 3, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 6: - return hqNxHelper( &hq4x_32, 4, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + switch(mult) + { + case 2: + return hqNxHelper( &hq2x_32, 2, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + case 3: + return hqNxHelper( &hq3x_32, 3, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + default: + return hqNxHelper( &hq4x_32, 4, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + } #ifdef HAVE_MMX - case 7: - return hqNxAsmHelper( &HQnX_asm::hq2x_32, 2, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 8: - return hqNxAsmHelper( &HQnX_asm::hq3x_32, 3, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 9: - return hqNxAsmHelper( &HQnX_asm::hq4x_32, 4, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + case 3: + switch(mult) + { + case 2: + return hqNxAsmHelper( &HQnX_asm::hq2x_32, 2, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + case 3: + return hqNxAsmHelper( &HQnX_asm::hq3x_32, 3, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + default: + return hqNxAsmHelper( &HQnX_asm::hq4x_32, 4, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + } #endif - case 10: - case 11: - case 12: - return xbrzHelper(xbrz::scale, type - 8, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - - case 13: - case 14: - case 15: - case 16: - case 17: - return xbrzHelper(xbrzOldScale, type - 11, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - - case 18: - case 19: - return xbrzHelper(xbrz::scale, type - 13, inputBuffer, inWidth, inHeight, outWidth, outHeight); - case 20: - return normalNxHelper( &normalNx, 2, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 21: - return normalNxHelper( &normalNx, 3, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 22: - return normalNxHelper( &normalNx, 4, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 23: - return normalNxHelper( &normalNx, 5, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 24: - return normalNxHelper( &normalNx, 6, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + case 4: + return xbrzHelper(xbrz::scale, mult, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + case 5: + return xbrzHelper(xbrzOldScale, mult, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + case 6: + return normalNxHelper( &normalNx, mult, inputBuffer, inWidth, inHeight, outWidth, outHeight ); } } return inputBuffer; diff --git a/src/version.h b/src/version.h index 7ee00c950..7cd576e3a 100644 --- a/src/version.h +++ b/src/version.h @@ -68,7 +68,7 @@ const char *GetVersionString(); // Version stored in the ini's [LastRun] section. // Bump it if you made some configuration change that you want to // be able to migrate in FGameConfigFile::DoGlobalSetup(). -#define LASTRUNVERSION "215" +#define LASTRUNVERSION "216" // Protocol version used in demos. // Bump it if you change existing DEM_ commands or add new ones. diff --git a/wadsrc/static/language.enu b/wadsrc/static/language.enu index 2b49fe55f..81b7d17f2 100644 --- a/wadsrc/static/language.enu +++ b/wadsrc/static/language.enu @@ -2783,7 +2783,8 @@ GLTEXMNU_ANISOTROPIC = "Anisotropic filter"; GLTEXMNU_TEXFORMAT = "Texture Format"; GLTEXMNU_ENABLEHIRES = "Enable hires textures"; GLTEXMNU_HQRESIZE = "High Quality Resize mode"; -GLTEXMNU_HQRESIZEWARN = "This mode requires %d times more video memory"; +GLTEXMNU_HQRESIZEMULT = "High Quality Resize multiplier"; +GLTEXMNU_HQRESIZEWARN = "This mode requires %d times more video memory"; GLTEXMNU_RESIZETEX = "Resize textures"; GLTEXMNU_RESIZESPR = "Resize sprites"; GLTEXMNU_RESIZEFNT = "Resize fonts"; @@ -2881,30 +2882,12 @@ OPTVAL_YAXIS = "Y Axis"; OPTVAL_XYAXIS = "X/Y Axis"; OPTVAL_SQUARE = "Square"; OPTVAL_ROUND = "Round"; -OPTVAL_SCALE2X = "Scale2x"; -OPTVAL_SCALE3X = "Scale3x"; -OPTVAL_SCALE4X = "Scale4x"; -OPTVAL_NORMAL2X = "Normal2x"; -OPTVAL_NORMAL3X = "Normal3x"; -OPTVAL_NORMAL4X = "Normal4x"; -OPTVAL_NORMAL5X = "Normal5x"; -OPTVAL_NORMAL6X = "Normal6x"; -OPTVAL_HQ2X = "hq2x"; -OPTVAL_HQ3X = "hq3x"; -OPTVAL_HQ4X = "hq4x"; -OPTVAL_HQ2XMMX = "hq2x MMX"; -OPTVAL_HQ3XMMX = "hq3x MMX"; -OPTVAL_HQ4XMMX = "hq4x MMX"; -OPTVAL_2XBRZ = "2xBRZ"; -OPTVAL_3XBRZ = "3xBRZ"; -OPTVAL_4XBRZ = "4xBRZ"; -OPTVAL_5XBRZ = "5xBRZ"; -OPTVAL_6XBRZ = "6xBRZ"; -OPTVAL_OLD_2XBRZ = "Old 2xBRZ"; -OPTVAL_OLD_3XBRZ = "Old 3xBRZ"; -OPTVAL_OLD_4XBRZ = "Old 4xBRZ"; -OPTVAL_OLD_5XBRZ = "Old 5xBRZ"; -OPTVAL_OLD_6XBRZ = "Old 6xBRZ"; +OPTVAL_SCALENX = "ScaleNx"; +OPTVAL_NORMALNX = "NormalNx"; +OPTVAL_HQNX = "hqNx"; +OPTVAL_HQNXMMX = "hqNx MMX"; +OPTVAL_NXBRZ = "xBRZ"; +OPTVAL_OLD_NXBRZ = "Old xBRZ"; OPTVAL_RADIAL = "Radial"; OPTVAL_PIXELFUZZ = "Pixel fuzz"; OPTVAL_SMOOTHFUZZ = "Smooth fuzz"; diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt index 965f23d0c..4026e2bc0 100644 --- a/wadsrc/static/menudef.txt +++ b/wadsrc/static/menudef.txt @@ -2151,51 +2151,32 @@ OptionValue "Particles" OptionValue "HqResizeModes" { 0, "$OPTVAL_OFF" - 1, "$OPTVAL_SCALE2X" - 2, "$OPTVAL_SCALE3X" - 3, "$OPTVAL_SCALE4X" - 4, "$OPTVAL_HQ2X" - 5, "$OPTVAL_HQ3X" - 6, "$OPTVAL_HQ4X" - 7, "$OPTVAL_HQ2XMMX" - 8, "$OPTVAL_HQ3XMMX" - 9, "$OPTVAL_HQ4XMMX" - 10, "$OPTVAL_2XBRZ" - 11, "$OPTVAL_3XBRZ" - 12, "$OPTVAL_4XBRZ" - 18, "$OPTVAL_5XBRZ" - 19, "$OPTVAL_6XBRZ" - 13, "$OPTVAL_OLD_2XBRZ" - 14, "$OPTVAL_OLD_3XBRZ" - 15, "$OPTVAL_OLD_4XBRZ" - 16, "$OPTVAL_OLD_5XBRZ" - 17, "$OPTVAL_OLD_6XBRZ" - 20, "$OPTVAL_NORMAL2X" - 21, "$OPTVAL_NORMAL3X" - 22, "$OPTVAL_NORMAL4X" - 23, "$OPTVAL_NORMAL5X" - 24, "$OPTVAL_NORMAL6X" + 1, "$OPTVAL_SCALENX" + 2, "$OPTVAL_HQNX" + 3, "$OPTVAL_HQNXMMX" + 4, "$OPTVAL_NXBRZ" + 5, "$OPTVAL_OLD_NXBRZ" + 6, "$OPTVAL_NORMALNX" +} + +OptionValue "HqResizeMultipliers" +{ + 1, "$OPTVAL_OFF" + 2, "2x" + 3, "3x" + 4, "4x" + 5, "5x" + 6, "6x" } OptionValue "HqResizeModesNoMMX" { 0, "$OPTVAL_OFF" - 1, "$OPTVAL_SCALE2X" - 2, "$OPTVAL_SCALE3X" - 3, "$OPTVAL_SCALE4X" - 4, "$OPTVAL_HQ2X" - 5, "$OPTVAL_HQ3X" - 6, "$OPTVAL_HQ4X" - 10, "$OPTVAL_2XBRZ" - 11, "$OPTVAL_3XBRZ" - 12, "$OPTVAL_4XBRZ" - 18, "$OPTVAL_5XBRZ" - 19, "$OPTVAL_6XBRZ" - 13, "$OPTVAL_OLD_2XBRZ" - 14, "$OPTVAL_OLD_3XBRZ" - 15, "$OPTVAL_OLD_4XBRZ" - 16, "$OPTVAL_OLD_5XBRZ" - 17, "$OPTVAL_OLD_6XBRZ" + 1, "$OPTVAL_SCALENX" + 2, "$OPTVAL_HQNX" + 4, "$OPTVAL_NXBRZ" + 5, "$OPTVAL_OLD_NXBRZ" + 6, "$OPTVAL_NORMALNX" } OptionValue "FogMode" @@ -2262,12 +2243,13 @@ OptionMenu "GLTextureGLOptions" protected ifOption(MMX) { - Option "$GLTEXMNU_HQRESIZE", gl_texture_hqresize, "HqResizeModes" + Option "$GLTEXMNU_HQRESIZE", gl_texture_hqresizemode, "HqResizeModes" } else { - Option "$GLTEXMNU_HQRESIZE", gl_texture_hqresize, "HqResizeModesNoMMX" + Option "$GLTEXMNU_HQRESIZE", gl_texture_hqresizemode, "HqResizeModesNoMMX" } + Option "$GLTEXMNU_HQRESIZEMULT", gl_texture_hqresizemult, "HqResizeMultipliers" StaticText "!HQRESIZE_WARNING!" Option "$GLTEXMNU_RESIZETEX", gl_texture_hqresize_textures, "OnOff" diff --git a/wadsrc/static/zscript/menu/optionmenu.txt b/wadsrc/static/zscript/menu/optionmenu.txt index f73035ab0..10bd91140 100644 --- a/wadsrc/static/zscript/menu/optionmenu.txt +++ b/wadsrc/static/zscript/menu/optionmenu.txt @@ -579,47 +579,9 @@ class GLTextureGLOptions : OptionMenu { string message; - if (gl_texture_hqresize > 0) + if (gl_texture_hqresizemult > 1 && gl_texture_hqresizemode > 0) { - int multiplier; - - switch (gl_texture_hqresize) - { - case 1: - case 4: - case 7: - case 10: - case 13: - case 20: - multiplier = 4; - break; - case 2: - case 5: - case 8: - case 11: - case 14: - case 21: - multiplier = 9; - break; - case 3: - case 6: - case 9: - case 12: - case 15: - case 22: - multiplier = 16; - break; - case 16: - case 18: - case 23: - multiplier = 25; - break; - case 17: - case 19: - case 24: - multiplier = 36; - break; - } + int multiplier = gl_texture_hqresizemult * gl_texture_hqresizemult; string localized = StringTable.Localize("$GLTEXMNU_HQRESIZEWARN"); message = String.Format(localized, multiplier);