diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plBitmap.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plBitmap.cpp index 90ca2c6b..3d3a8366 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plBitmap.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plBitmap.cpp @@ -113,7 +113,8 @@ UInt32 plBitmap::Read( hsStream *s ) fFlags = s->ReadSwap16(); fCompressionType = s->ReadByte(); - if(( fCompressionType == kUncompressed )||( fCompressionType == kJPEGCompression )) + if( fCompressionType == kUncompressed || fCompressionType == kJPEGCompression || + fCompressionType == kPNGCompression ) { fUncompressedInfo.fType = s->ReadByte(); read++; @@ -145,7 +146,8 @@ UInt32 plBitmap::Write( hsStream *s ) s->WriteSwap16( fFlags ); s->WriteByte( fCompressionType ); - if(( fCompressionType == kUncompressed )||(fCompressionType == kJPEGCompression )) + if( fCompressionType == kUncompressed || fCompressionType == kJPEGCompression || + fCompressionType == kPNGCompression ) { s->WriteByte( fUncompressedInfo.fType ); written++; diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plBitmap.h b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plBitmap.h index 00e9cae9..7ccf0c48 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plBitmap.h +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plBitmap.h @@ -104,7 +104,8 @@ class plBitmap : public hsKeyedObject { kUncompressed = 0x0, kDirectXCompression = 0x1, - kJPEGCompression = 0x2 + kJPEGCompression = 0x2, + kPNGCompression = 0x3 }; struct DirectXInfo diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plMipmap.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plMipmap.cpp index 93786dfa..f25488a1 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plMipmap.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plMipmap.cpp @@ -60,6 +60,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include "../plPipeline/hsGDeviceRef.h" #include "plProfile.h" #include "../plJPEG/plJPEG.h" +#include "plPNG.h" plProfile_CreateMemCounter("Mipmaps", "Memory", MemMipmaps); @@ -122,11 +123,8 @@ void plMipmap::Create( UInt32 width, UInt32 height, unsigned config, UInt8 numLe } fCompressionType = compType; - if( compType == kUncompressed ) - { - fUncompressedInfo.fType = format; - } - else if( compType == kJPEGCompression ) + if( compType == kUncompressed || compType == kJPEGCompression || + compType == kPNGCompression ) { fUncompressedInfo.fType = format; } @@ -269,6 +267,10 @@ UInt32 plMipmap::Read( hsStream *s ) case kJPEGCompression: IReadJPEGImage( s ); break; + + case kPNGCompression: + IReadPNGImage( s ); + break; default: hsAssert( false, "Unknown compression type in plMipmap::Read()" ); @@ -309,6 +311,10 @@ UInt32 plMipmap::Write( hsStream *s ) IWriteJPEGImage( s ); break; + case kPNGCompression: + IWritePNGImage( s ); + break; + default: hsAssert( false, "Unknown compression type in plMipmap::Read()" ); return totalWritten; @@ -576,6 +582,23 @@ void plMipmap::IWriteJPEGImage( hsStream *stream ) delete alpha; } +void plMipmap::IReadPNGImage(hsStream* stream) +{ + plMipmap* temp = NULL; + + temp = plPNG::Instance().ReadFromStream(stream); + + if (temp) { + CopyFrom(temp); + delete temp; + } +} + +void plMipmap::IWritePNGImage(hsStream* stream) +{ + plPNG::Instance().WriteToStream(stream, this); +} + //// GetLevelSize ///////////////////////////////////////////////////////////// // Get the size of a single mipmap level (0 is the largest) @@ -613,6 +636,7 @@ void plMipmap::IBuildLevelSizes() case kUncompressed: case kJPEGCompression: + case kPNGCompression: fLevelSizes[ level ] = height * rowBytes; break; @@ -1586,6 +1610,7 @@ void plMipmap::CopyFrom( const plMipmap *source ) break; case kUncompressed: case kJPEGCompression: + case kPNGCompression: fUncompressedInfo.fType = source->fUncompressedInfo.fType; break; default: diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plMipmap.h b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plMipmap.h index 79b3568c..bbf0dac4 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plMipmap.h +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plMipmap.h @@ -310,6 +310,8 @@ class plMipmap : public plBitmap void IWriteRLEImage( hsStream *stream, plMipmap *mipmap ); void IReadJPEGImage( hsStream *stream ); void IWriteJPEGImage( hsStream *stream ); + void IReadPNGImage( hsStream *stream ); + void IWritePNGImage( hsStream *stream ); void IBuildLevelSizes(); void IColorLevel( UInt8 level, const UInt8 *colorMask );