From 3a62c231d21997070584a13f26a1ddb558d67844 Mon Sep 17 00:00:00 2001 From: rarified Date: Thu, 21 Nov 2019 13:54:54 -0700 Subject: [PATCH] Merge H-uru GIT PR356: Adam Johnson committed 48ad646 on 15 Jan 17 Manually merge #356 Merge remote-tracking branch 'deledrius/plMipmap_png' --- .../Plasma/PubUtilLib/plGImage/plBitmap.cpp | 6 ++-- .../Plasma/PubUtilLib/plGImage/plBitmap.h | 3 +- .../Plasma/PubUtilLib/plGImage/plMipmap.cpp | 35 ++++++++++++++++--- .../Plasma/PubUtilLib/plGImage/plMipmap.h | 2 ++ 4 files changed, 38 insertions(+), 8 deletions(-) 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..2c98eb8e 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 = nullptr; + + 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 );