summaryrefslogtreecommitdiff
path: root/src/win95/ilbm_ext.cpp
diff options
context:
space:
mode:
authorSteven Fuller <relnev@icculus.org>2001-07-01 00:55:22 +0000
committerPatryk Obara <dreamer.tan@gmail.com>2019-08-20 02:09:04 +0200
commit2186d5f3f95cd74a070a490d899291648d58667a (patch)
tree55241a1afa3e1a22e0b6593a8dead0b703800f44 /src/win95/ilbm_ext.cpp
parent218ca90543758a20ac326e444ca0643174ca7384 (diff)
Initial revision
Diffstat (limited to 'src/win95/ilbm_ext.cpp')
-rw-r--r--src/win95/ilbm_ext.cpp87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/win95/ilbm_ext.cpp b/src/win95/ilbm_ext.cpp
new file mode 100644
index 0000000..e1d8a4d
--- /dev/null
+++ b/src/win95/ilbm_ext.cpp
@@ -0,0 +1,87 @@
+#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++);
+ }
+ }
+
+} \ No newline at end of file