diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 26267e18be..c64d60d4b5 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 1e00e7fe6d..b06769b1a1 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 16119173b3..c34f93e4e0 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++) {