avp/src/win95/ilbm_ext.cpp
2019-08-20 02:22:36 +02:00

87 lines
1.7 KiB
C++

#include "ilbm_ext.hpp"
IFF_IMPLEMENT_DYNCREATE("ILBM","TRAN",IlbmTranChunk)
IFF_IMPLEMENT_DYNCREATE("ILBM","ALPH",IlbmAlphChunk)
IFF_IMPLEMENT_DYNCREATE("MIPM","CONT",MipmContChunk)
IFF_IMPLEMENT_DYNCREATE("ILBM","S3TC",IlbmS3tcChunk)
IFF_IMPLEMENT_DYNCREATE("MIPM","FLAG",MipmFlagChunk)
namespace IFF
{
void IlbmTranChunk::Serialize(Archive * pArchv)
{
pArchv->Transfer(eTransType);
pArchv->Transfer(xPos);
pArchv->Transfer(yPos);
pArchv->Transfer(rgb);
}
void IlbmAlphChunk::Serialize(Archive * pArchv)
{
pArchv->Transfer(width);
pArchv->Transfer(height);
pArchv->Transfer(nBitPlanes);
pArchv->Transfer(eCompression);
IlbmBodyChunk::Serialize(pArchv);
}
bool IlbmAlphChunk::GetHeaderInfo() const
{
IlbmBodyChunk::nWidth = width;
IlbmBodyChunk::eCompression = eCompression;
IlbmBodyChunk::nBitPlanes = nBitPlanes;
return true;
}
void MipmContChunk::Serialize(Archive * pArchv)
{
pArchv->Transfer(nMipMaps);
pArchv->Transfer(eFilter);
}
void MipmFlagChunk::Serialize(Archive * pArchv)
{
pArchv->Transfer(flags);
}
IlbmS3tcChunk::IlbmS3tcChunk()
{
m_idCk = "S3TC";
pData = NULL;
dataSize = 0;
}
IlbmS3tcChunk::~IlbmS3tcChunk()
{
if(pData) delete [] pData;
pData = NULL;
}
void IlbmS3tcChunk::Serialize(Archive * pArchv)
{
pArchv->Transfer(flags);
pArchv->Transfer(fourCC);
pArchv->Transfer(redWeight);
pArchv->Transfer(blueWeight);
pArchv->Transfer(greenWeight);
pArchv->Transfer(width);
pArchv->Transfer(height);
pArchv->Transfer(dataSize);
if (pArchv->m_bIsLoading)
{
if(pData) delete [] pData;
pData = new UBYTE[dataSize];
}
UBYTE *pDataPos = pData;
for(unsigned i=0;i<dataSize;i++)
{
pArchv->Transfer(*pDataPos++);
}
}
}