Microsoft-3D-Movie-Maker/BREN/INC/TMAP.H

111 lines
2.9 KiB
C++

/*************************************************************************
Texture map (TMAP)
This manages I/O and caching for BPMPs
*************************************************************************/
#ifndef TMAP_H
#define TMAP_H
const CTG kctgTmap = 'TMAP';
const CTG kctgTxxf = 'TXXF';
// tmap on file
struct TMAPF
{
short bo;
short osk;
short cbRow;
byte type;
byte grftmap;
short xpLeft;
short ypTop;
short dxp;
short dyp;
short xpOrigin;
short ypOrigin;
// void *rgb; // pixels follow immediately after TMAPF
};
const ulong kbomTmapf = 0x54555000;
/* A TeXture XransForm on File */
typedef struct _txxff
{
short bo; // byte order
short osk; // OS kind
BMAT23 bmat23;
} TXXFF, *PTXXFF;
const BOM kbomTxxff = 0x5FFF0000;
// REVIEW *****: should TMAPs have shade table chunks under them, or
// is the shade table a global animal? Right now it's global.
/****************************************
The TMAP class
****************************************/
typedef class TMAP *PTMAP;
#define TMAP_PAR BACO
#define kclsTMAP 'TMAP'
class TMAP : public TMAP_PAR
{
RTCLASS_DEC
ASSERT
MARKMEM
protected:
BPMP _bpmp;
bool _fImported; // if fTrue, BRender allocated the pixels
// if fFalse, we allocated the pixels
protected:
TMAP(void) {} // can't instantiate directly; must use PtmapRead
#ifdef NOT_YET_REVIEWED
void TMAP::_SortInverseTable(byte *prgb, long cbRgb, BRCLR brclrLo,
BRCLR brclrHi);
#endif // NOT_YET_REVIEWED
public:
~TMAP(void);
// REVIEW *****(peted): MBMP's ...Read function just takes a PBLCK; this
// is more like the FRead... function, just without the BACO stuff. Why
// the difference?
// Addendum: to enable compiling 'TMAP' chunks, I added an FWrite that does
// take just a PBLCK. Should this be necessary for PtmapRead in the future,
// it's a simple matter of extracting the code in PtmapRead that is needed,
// like I did for FWrite.
static PTMAP PtmapRead(PCFL pcfl, CTG ctg, CNO cno);
bool FWrite(PCFL pcfl, CTG ctg, CNO *pcno);
// a chunky resource reader for a TMAP
static bool FReadTmap(PCRF pcrf, CTG ctg, CNO cno, PBLCK pblck,
PBACO *ppbaco, long *pcb);
// Given a BPMP (a Brender br_pixelmap), create a TMAP
static PTMAP PtmapNewFromBpmp(BPMP *pbpmp);
// Give back the bpmp for this TMAP
BPMP *Pbpmp(void) { return &_bpmp; }
// Reads a .bmp file.
static PTMAP PtmapReadNative(FNI *pfni, PGL pglclr = pvNil);
// Writes a standalone TMAP-chunk file (not a .chk)
bool FWriteTmapChkFile(PFNI pfniDst, bool fCompress, PMSNK pmsnkErr = pvNil);
// Creates a TMAP from the width, height, and an array of bytes
static PTMAP PtmapNew(byte *prgbPixels, long dxWidth, long dxHeight);
// Some useful file methods
long CbOnFile(void)
{ return(size(TMAPF) + LwMul(_bpmp.row_bytes, _bpmp.height)); }
bool FWrite(PBLCK pblck);
#ifdef NOT_YET_REVIEWED
// Useful shade-table type method
byte * PrgbBuildInverseTable(void);
#endif // NOT_YET_REVIEWED
};
#endif // TMAP_H