mirror of https://github.com/zeldaret/tp.git
118 lines
3.1 KiB
C++
118 lines
3.1 KiB
C++
#ifndef J3DTEXTURE_H
|
|
#define J3DTEXTURE_H
|
|
|
|
#include "JSystem/J3DGraphBase/J3DStruct.h"
|
|
#include "JSystem/JUtility/JUTAssert.h"
|
|
#include "JSystem/JUtility/JUTTexture.h"
|
|
#include "dolphin/types.h"
|
|
|
|
/**
|
|
* @ingroup jsystem-j3d
|
|
*
|
|
*/
|
|
class J3DTexture {
|
|
private:
|
|
/* 0x0 */ u16 mNum;
|
|
/* 0x2 */ u16 field_0x2;
|
|
/* 0x4 */ ResTIMG* mpRes;
|
|
|
|
public:
|
|
J3DTexture(u16 num, ResTIMG* res) : mNum(num), field_0x2(0), mpRes(res) {}
|
|
/* 8031204C */ void loadGX(u16, _GXTexMapID) const;
|
|
/* 803121A4 */ void entryNum(u16);
|
|
/* 8031221C */ void addResTIMG(u16, ResTIMG const*);
|
|
/* 803366A4 */ virtual ~J3DTexture() {}
|
|
|
|
u16 getNum() const { return mNum; }
|
|
ResTIMG* getResTIMG(u16 entry) const {
|
|
J3D_ASSERT(72, entry < mNum, "Error : range over.");
|
|
return &mpRes[entry];
|
|
}
|
|
void setResTIMG(u16 entry, const ResTIMG& timg) {
|
|
mpRes[entry] = timg;
|
|
mpRes[entry].imageOffset = ((mpRes[entry].imageOffset + (u32)&timg - (u32)(mpRes + entry)));
|
|
mpRes[entry].paletteOffset = ((mpRes[entry].paletteOffset + (u32)&timg - (u32)(mpRes + entry)));
|
|
}
|
|
};
|
|
|
|
extern J3DTexMtxInfo const j3dDefaultTexMtxInfo;
|
|
|
|
/**
|
|
* @ingroup jsystem-j3d
|
|
*
|
|
*/
|
|
class J3DTexMtx {
|
|
public:
|
|
J3DTexMtx() {
|
|
mTexMtxInfo = j3dDefaultTexMtxInfo;
|
|
}
|
|
J3DTexMtx(const J3DTexMtxInfo& info) {
|
|
mTexMtxInfo = info;
|
|
}
|
|
/* 803238C4 */ void load(u32) const;
|
|
/* 80323900 */ void calc(const Mtx);
|
|
/* 80323920 */ void calcTexMtx(const Mtx);
|
|
/* 80323C0C */ void calcPostTexMtx(const Mtx);
|
|
/* 80324358 */ void loadTexMtx(u32) const;
|
|
/* 803243BC */ void loadPostTexMtx(u32) const;
|
|
|
|
J3DTexMtxInfo& getTexMtxInfo() { return mTexMtxInfo; }
|
|
Mtx& getMtx() { return mMtx; }
|
|
void setEffectMtx(Mtx effectMtx) { mTexMtxInfo.setEffectMtx(effectMtx); }
|
|
|
|
private:
|
|
/* 0x00 */ J3DTexMtxInfo mTexMtxInfo;
|
|
/* 0x64 */ Mtx mMtx;
|
|
}; // Size: 0x94
|
|
|
|
/**
|
|
* @ingroup jsystem-j3d
|
|
*
|
|
*/
|
|
struct J3DTexCoordInfo {
|
|
/* 0x0 */ u8 mTexGenType;
|
|
/* 0x1 */ u8 mTexGenSrc;
|
|
/* 0x2 */ u8 mTexGenMtx;
|
|
/* 0x3 */ u8 pad;
|
|
};
|
|
|
|
extern J3DTexCoordInfo const j3dDefaultTexCoordInfo[8];
|
|
|
|
/**
|
|
* @ingroup jsystem-j3d
|
|
*
|
|
*/
|
|
struct J3DTexCoord : public J3DTexCoordInfo {
|
|
/* 8000E464 */ J3DTexCoord() {
|
|
setTexCoordInfo(j3dDefaultTexCoordInfo[0]);
|
|
resetTexMtxReg();
|
|
}
|
|
J3DTexCoord(J3DTexCoordInfo const& info) {
|
|
setTexCoordInfo(info);
|
|
resetTexMtxReg();
|
|
}
|
|
void setTexCoordInfo(J3DTexCoordInfo const& info) {
|
|
__memcpy(this, &info, sizeof(J3DTexCoordInfo));
|
|
}
|
|
|
|
u8 getTexGenType() const { return mTexGenType; }
|
|
u8 getTexGenSrc() const { return mTexGenSrc; }
|
|
u8 getTexGenMtx() const { return mTexGenMtx; }
|
|
u32 getTexMtxReg() const { return mTexMtxReg & 0xff; }
|
|
void setTexGenMtx(u8 param_1) { mTexGenMtx = param_1; }
|
|
void setTexMtxReg(u16 reg) { mTexMtxReg = reg; }
|
|
J3DTexCoord& operator=(const J3DTexCoord& other) {
|
|
// Fake match (__memcpy or = doesn't match)
|
|
*(u32*)this = *(u32*)&other;
|
|
return *this;
|
|
}
|
|
|
|
void resetTexMtxReg() {
|
|
mTexMtxReg = mTexGenMtx;
|
|
}
|
|
|
|
/* 0x4 */ u16 mTexMtxReg;
|
|
}; // Size: 0x6
|
|
|
|
#endif /* J3DTEXTURE_H */
|