diff options
Diffstat (limited to 'graphics/decoders')
-rw-r--r-- | graphics/decoders/iff.cpp | 6 | ||||
-rw-r--r-- | graphics/decoders/iff.h | 4 | ||||
-rw-r--r-- | graphics/decoders/image_decoder.h | 6 | ||||
-rw-r--r-- | graphics/decoders/tga.cpp | 2 | ||||
-rw-r--r-- | graphics/decoders/tga.h | 1 |
5 files changed, 17 insertions, 2 deletions
diff --git a/graphics/decoders/iff.cpp b/graphics/decoders/iff.cpp index 7b37969fc1..fe27258d28 100644 --- a/graphics/decoders/iff.cpp +++ b/graphics/decoders/iff.cpp @@ -30,6 +30,10 @@ namespace Graphics { IFFDecoder::IFFDecoder() { _surface = 0; _palette = 0; + + // these 2 properties are not reset by destroy(), so the default is set here. + _numRelevantPlanes = 8; + _pixelPacking = false; destroy(); } @@ -54,8 +58,6 @@ void IFFDecoder::destroy() { _paletteRanges.clear(); _type = TYPE_UNKNOWN; _paletteColorCount = 0; - _numRelevantPlanes = 8; - _pixelPacking = false; } bool IFFDecoder::loadStream(Common::SeekableReadStream &stream) { diff --git a/graphics/decoders/iff.h b/graphics/decoders/iff.h index beac62e519..37cb4b38c1 100644 --- a/graphics/decoders/iff.h +++ b/graphics/decoders/iff.h @@ -85,6 +85,8 @@ public: /** * The number of planes to decode, also determines the pixel packing if _packPixels is true. * 8 == decode all planes, map 1 pixel in 1 byte. (default, no packing even if _packPixels is true) + * + * NOTE: this property must be reset manually, and is not reset by a call to destroy(). */ void setNumRelevantPlanes(const uint8 numRelevantPlanes) { _numRelevantPlanes = numRelevantPlanes; } @@ -94,6 +96,8 @@ public: * 2 == decode first 2 planes, pack 4 pixels in 1 byte. This makes _surface->w 1/4th of _header.width * 4 == decode first 4 planes, pack 2 pixels in 1 byte. This makes _surface->w half of _header.width * Packed bitmaps won't have a proper surface format since there is no way to tell it to use 1, 2 or 4 bits per pixel + * + * NOTE: this property must be reset manually, and is not reset by a call to destroy(). */ void setPixelPacking(const bool pixelPacking) { _pixelPacking = pixelPacking; } private: diff --git a/graphics/decoders/image_decoder.h b/graphics/decoders/image_decoder.h index 49e31c6e3a..a39a9a1493 100644 --- a/graphics/decoders/image_decoder.h +++ b/graphics/decoders/image_decoder.h @@ -44,6 +44,9 @@ public: /** * Load an image from the specified stream + * + * loadStream() should implicitly call destroy() to free the memory + * of the last loadStream() call. * * @param stream the input stream * @return whether loading the file succeeded @@ -54,6 +57,9 @@ public: /** * Destroy this decoder's surface and palette + * + * This should be called by a loadStream() implementation as well + * as the destructor. */ virtual void destroy() = 0; diff --git a/graphics/decoders/tga.cpp b/graphics/decoders/tga.cpp index a9f136d238..bc27f18a49 100644 --- a/graphics/decoders/tga.cpp +++ b/graphics/decoders/tga.cpp @@ -50,6 +50,8 @@ void TGADecoder::destroy() { } bool TGADecoder::loadStream(Common::SeekableReadStream &tga) { + destroy(); + byte imageType, pixelDepth; bool success; success = readHeader(tga, imageType, pixelDepth); diff --git a/graphics/decoders/tga.h b/graphics/decoders/tga.h index d8ccf8f766..5b1e87d4c5 100644 --- a/graphics/decoders/tga.h +++ b/graphics/decoders/tga.h @@ -26,6 +26,7 @@ /* * TGA decoder used in engines: * - wintermute + * - zvision */ #ifndef GRAPHICS_DECODERS_TGA_H |