From 659be956def50afdc58c2d12e0ebed73ebd0e144 Mon Sep 17 00:00:00 2001 From: Randy Heit Date: Thu, 16 Apr 2009 02:02:56 +0000 Subject: [PATCH] - Fixed: When FMultiPatchTexture::MakeTexture() needed to work in RGB colorspace, it didn't zero out the temporary buffer. SVN r1547 (trunk) --- docs/rh-log.txt | 2 ++ src/textures/bitmap.cpp | 4 ++-- src/textures/multipatchtexture.cpp | 19 +++++++++++-------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 26267e18b..c64d60d4b 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,4 +1,6 @@ April 15, 2009 +- Fixed: When FMultiPatchTexture::MakeTexture() needed to work in RGB + colorspace, it didn't zero out the temporary buffer. - Fixed memory leak from leftover code for 7z loading and added the LUMPF_ZIPFILE flag to their contents so they have the same semantics as zips. diff --git a/src/textures/bitmap.cpp b/src/textures/bitmap.cpp index 1e00e7fe6..b06769b1a 100644 --- a/src/textures/bitmap.cpp +++ b/src/textures/bitmap.cpp @@ -339,8 +339,8 @@ static const CopyFunc copyfuncs[][9]={ // //=========================================================================== bool ClipCopyPixelRect(int texwidth, int texheight, int &originx, int &originy, - const BYTE *&patch, int &srcwidth, int &srcheight, - int &pstep_x, int &pstep_y, int rotate) + const BYTE *&patch, int &srcwidth, int &srcheight, + int &pstep_x, int &pstep_y, int rotate) { int pixxoffset; int pixyoffset; diff --git a/src/textures/multipatchtexture.cpp b/src/textures/multipatchtexture.cpp index 16119173b..c34f93e4e 100644 --- a/src/textures/multipatchtexture.cpp +++ b/src/textures/multipatchtexture.cpp @@ -488,8 +488,6 @@ void FMultiPatchTexture::MakeTexture () // Add a little extra space at the end if the texture's height is not // a power of 2, in case somebody accidentally makes it repeat vertically. int numpix = Width * Height + (1 << HeightBits) - Height; - BYTE blendwork[256]; - static BYTE NullMap[256] = {0}; bool hasTranslucent = false; Pixels = new BYTE[numpix]; @@ -503,18 +501,20 @@ void FMultiPatchTexture::MakeTexture () // and merge these pixels in. for (int i = 0; i < NumParts; ++i) { - BYTE *trans = Parts[i].Translation? Parts[i].Translation->Remap : NULL; + BYTE *trans = Parts[i].Translation ? Parts[i].Translation->Remap : NULL; if (Parts[i].op != OP_COPY) { - trans = NullMap; hasTranslucent = true; } - else if (Parts[i].Blend != 0) + else { - trans = GetBlendMap(Parts[i].Blend, blendwork); + if (Parts[i].Blend != 0) + { + trans = GetBlendMap(Parts[i].Blend, blendwork); + } + Parts[i].Texture->CopyToBlock (Pixels, Width, Height, + Parts[i].OriginX, Parts[i].OriginY, Parts[i].Rotate, trans); } - Parts[i].Texture->CopyToBlock (Pixels, Width, Height, - Parts[i].OriginX, Parts[i].OriginY, Parts[i].Rotate, trans); } if (hasTranslucent) @@ -522,6 +522,9 @@ void FMultiPatchTexture::MakeTexture () // In case there are translucent patches let's do the composition in // True color to keep as much precision as possible before downconverting to the palette. BYTE *buffer = new BYTE[Width * Height * 4]; + BYTE blendwork[256]; + + memset(buffer, 0, Width * Height * 4); FillBuffer(buffer, Width * 4, Height, TEX_RGB); for(int y = 0; y < Height; y++) {