|
|
|
@ -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: |
|
|
|
|