From aece9aaa58bed5864fde2e7a84976e0afaf5288f Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 3 Sep 2016 14:01:51 +0200 Subject: [PATCH] - added xBRZ texture scaler after clearing the licensing conditions. A screenshot of the confirmation that this is ok has been added to the 'licenses' folder. --- docs/licenses/xBRZ.jpg | Bin 0 -> 60099 bytes src/CMakeLists.txt | 6 +++- src/gl/data/gl_vertexbuffer.h | 10 ++++++ src/gl/scene/gl_scene.cpp | 2 -- src/gl/shaders/gl_shader.h | 3 +- src/gl/textures/gl_hqresize.cpp | 62 +++++++++++++++++++++++++++++--- wadsrc/static/menudef.z | 6 ++++ 7 files changed, 80 insertions(+), 9 deletions(-) create mode 100644 docs/licenses/xBRZ.jpg diff --git a/docs/licenses/xBRZ.jpg b/docs/licenses/xBRZ.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab8335391b0e35541662e9664ad53c31aaed0c51 GIT binary patch literal 60099 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 VZ-P$?YO$&>=SYI 9) -#else - if (self < 0 || self > 6) -#endif + if (self < 0 || self > 16) + { 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 GLRenderer->FlushTextures(); } @@ -242,6 +248,42 @@ static unsigned char *hqNxHelper( void (*hqNxFunction) ( unsigned*, unsigned*, i } + +static unsigned char *xbrzHelper( void (*xbrzFunction) ( size_t, const uint32_t*, uint32_t*, int, int, xbrz::ColorFormat, const xbrz::ScalerCfg&, int, int ), + const int N, + unsigned char *inputBuffer, + const int inWidth, + const int inHeight, + int &outWidth, + int &outHeight ) +{ + outWidth = N * inWidth; + outHeight = N *inHeight; + + unsigned char * newBuffer = new unsigned char[outWidth*outHeight*4]; + xbrzFunction(N, reinterpret_cast(inputBuffer), reinterpret_cast(newBuffer), inWidth, inHeight, xbrz::ARGB, xbrz::ScalerCfg(), 0, std::numeric_limits::max()); + delete[] inputBuffer; + return newBuffer; +} + +static unsigned char *xbrzoldHelper( void (*xbrzFunction) ( size_t factor, const uint32_t* src, uint32_t* trg, int srcWidth, int srcHeight, const xbrz_old::ScalerCfg& cfg, int yFirst, int yLast ), + const int N, + unsigned char *inputBuffer, + const int inWidth, + const int inHeight, + int &outWidth, + int &outHeight ) +{ + outWidth = N * inWidth; + outHeight = N *inHeight; + + unsigned char * newBuffer = new unsigned char[outWidth*outHeight*4]; + xbrzFunction(N, reinterpret_cast(inputBuffer), reinterpret_cast(newBuffer), inWidth, inHeight, xbrz_old::ScalerCfg(), 0, std::numeric_limits::max()); + delete[] inputBuffer; + return newBuffer; +} + + //=========================================================================== // // [BB] Upsamples the texture in inputBuffer, frees inputBuffer and returns @@ -322,6 +364,16 @@ unsigned char *gl_CreateUpsampledTextureBuffer ( const FTexture *inputTexture, u case 9: 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: + return xbrzoldHelper(xbrz_old::scale, type - 11, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + } } return inputBuffer; diff --git a/wadsrc/static/menudef.z b/wadsrc/static/menudef.z index 2386b1076c..86e2d5dc08 100644 --- a/wadsrc/static/menudef.z +++ b/wadsrc/static/menudef.z @@ -134,6 +134,12 @@ OptionValue "HqResizeModes" 7, "$OPTVAL_HQ2XMMX" 8, "$OPTVAL_HQ3XMMX" 9, "$OPTVAL_HQ4XMMX" + 10, "xBRZ 2x" + 11, "xBRZ 3x" + 12, "xBRZ 4x" + 13, "xBRZ_old 2x" + 14, "xBRZ_old 3x" + 15, "xBRZ_old 4x" } OptionValue "FogMode"