Browse Source

Merge H-uru GIT PR356: PNG support for mipmap

rarified/vs2003buildtargets
rarified 5 years ago
parent
commit
516c0f7ed0
  1. 6
      MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plBitmap.cpp
  2. 3
      MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plBitmap.h
  3. 35
      MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plMipmap.cpp
  4. 2
      MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plMipmap.h

6
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plBitmap.cpp

@ -113,7 +113,8 @@ UInt32 plBitmap::Read( hsStream *s )
fFlags = s->ReadSwap16(); fFlags = s->ReadSwap16();
fCompressionType = s->ReadByte(); fCompressionType = s->ReadByte();
if(( fCompressionType == kUncompressed )||( fCompressionType == kJPEGCompression )) if( fCompressionType == kUncompressed || fCompressionType == kJPEGCompression ||
fCompressionType == kPNGCompression )
{ {
fUncompressedInfo.fType = s->ReadByte(); fUncompressedInfo.fType = s->ReadByte();
read++; read++;
@ -145,7 +146,8 @@ UInt32 plBitmap::Write( hsStream *s )
s->WriteSwap16( fFlags ); s->WriteSwap16( fFlags );
s->WriteByte( fCompressionType ); s->WriteByte( fCompressionType );
if(( fCompressionType == kUncompressed )||(fCompressionType == kJPEGCompression )) if( fCompressionType == kUncompressed || fCompressionType == kJPEGCompression ||
fCompressionType == kPNGCompression )
{ {
s->WriteByte( fUncompressedInfo.fType ); s->WriteByte( fUncompressedInfo.fType );
written++; written++;

3
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plBitmap.h

@ -104,7 +104,8 @@ class plBitmap : public hsKeyedObject
{ {
kUncompressed = 0x0, kUncompressed = 0x0,
kDirectXCompression = 0x1, kDirectXCompression = 0x1,
kJPEGCompression = 0x2 kJPEGCompression = 0x2,
kPNGCompression = 0x3
}; };
struct DirectXInfo struct DirectXInfo

35
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 "../plPipeline/hsGDeviceRef.h"
#include "plProfile.h" #include "plProfile.h"
#include "../plJPEG/plJPEG.h" #include "../plJPEG/plJPEG.h"
#include "plPNG.h"
plProfile_CreateMemCounter("Mipmaps", "Memory", MemMipmaps); plProfile_CreateMemCounter("Mipmaps", "Memory", MemMipmaps);
@ -122,11 +123,8 @@ void plMipmap::Create( UInt32 width, UInt32 height, unsigned config, UInt8 numLe
} }
fCompressionType = compType; fCompressionType = compType;
if( compType == kUncompressed ) if( compType == kUncompressed || compType == kJPEGCompression ||
{ compType == kPNGCompression )
fUncompressedInfo.fType = format;
}
else if( compType == kJPEGCompression )
{ {
fUncompressedInfo.fType = format; fUncompressedInfo.fType = format;
} }
@ -270,6 +268,10 @@ UInt32 plMipmap::Read( hsStream *s )
IReadJPEGImage( s ); IReadJPEGImage( s );
break; break;
case kPNGCompression:
IReadPNGImage( s );
break;
default: default:
hsAssert( false, "Unknown compression type in plMipmap::Read()" ); hsAssert( false, "Unknown compression type in plMipmap::Read()" );
return totalRead; return totalRead;
@ -309,6 +311,10 @@ UInt32 plMipmap::Write( hsStream *s )
IWriteJPEGImage( s ); IWriteJPEGImage( s );
break; break;
case kPNGCompression:
IWritePNGImage( s );
break;
default: default:
hsAssert( false, "Unknown compression type in plMipmap::Read()" ); hsAssert( false, "Unknown compression type in plMipmap::Read()" );
return totalWritten; return totalWritten;
@ -576,6 +582,23 @@ void plMipmap::IWriteJPEGImage( hsStream *stream )
delete alpha; 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 ///////////////////////////////////////////////////////////// //// GetLevelSize /////////////////////////////////////////////////////////////
// Get the size of a single mipmap level (0 is the largest) // Get the size of a single mipmap level (0 is the largest)
@ -613,6 +636,7 @@ void plMipmap::IBuildLevelSizes()
case kUncompressed: case kUncompressed:
case kJPEGCompression: case kJPEGCompression:
case kPNGCompression:
fLevelSizes[ level ] = height * rowBytes; fLevelSizes[ level ] = height * rowBytes;
break; break;
@ -1586,6 +1610,7 @@ void plMipmap::CopyFrom( const plMipmap *source )
break; break;
case kUncompressed: case kUncompressed:
case kJPEGCompression: case kJPEGCompression:
case kPNGCompression:
fUncompressedInfo.fType = source->fUncompressedInfo.fType; fUncompressedInfo.fType = source->fUncompressedInfo.fType;
break; break;
default: default:

2
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plMipmap.h

@ -310,6 +310,8 @@ class plMipmap : public plBitmap
void IWriteRLEImage( hsStream *stream, plMipmap *mipmap ); void IWriteRLEImage( hsStream *stream, plMipmap *mipmap );
void IReadJPEGImage( hsStream *stream ); void IReadJPEGImage( hsStream *stream );
void IWriteJPEGImage( hsStream *stream ); void IWriteJPEGImage( hsStream *stream );
void IReadPNGImage( hsStream *stream );
void IWritePNGImage( hsStream *stream );
void IBuildLevelSizes(); void IBuildLevelSizes();
void IColorLevel( UInt8 level, const UInt8 *colorMask ); void IColorLevel( UInt8 level, const UInt8 *colorMask );

Loading…
Cancel
Save