Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions libs/JSystem/include/JSystem/J3DGraphBase/J3DMatBlock.h
Original file line number Diff line number Diff line change
Expand Up @@ -1755,6 +1755,16 @@ class J3DIndBlockNull : public J3DIndBlock {
virtual ~J3DIndBlockNull() {}
};

#ifdef DUSK_TPHD
struct PolygonOffset {
BE(f32) mFrontOffset;
BE(f32) mFrontScale;
BE(f32) mBackOffset;
BE(f32) mBackScale;
BE(f32) mClamp;
};
#endif

/**
* @ingroup jsystem-j3d
*
Expand Down Expand Up @@ -1787,6 +1797,10 @@ class J3DPEBlock {
virtual void setDither(u8 const*) {}
virtual void setDither(u8) {}
virtual u8 getDither() const { return 0; }
#ifdef DUSK_TPHD
virtual void setPolygonOffset(const PolygonOffset&) {}
virtual PolygonOffset* getPolygonOffset() { return NULL; }
#endif
virtual u32 getFogOffset() const { return 0; }
virtual void setFogOffset(u32) {}
virtual ~J3DPEBlock() {}
Expand Down Expand Up @@ -1950,12 +1964,25 @@ class J3DPEBlockFull : public J3DPEBlock {
virtual void setFogOffset(u32 fogOffset) { mFogOffset = fogOffset; }
virtual ~J3DPEBlockFull() {}

#ifdef DUSK_TPHD
virtual void setPolygonOffset(const PolygonOffset& offset) {
mPolygonOffset = offset;
}

virtual PolygonOffset* getPolygonOffset() {
return &mPolygonOffset;
}
#endif

/* 0x04 */ J3DFog mFog;
/* 0x30 */ J3DAlphaComp mAlphaComp;
/* 0x34 */ J3DBlend mBlend;
/* 0x38 */ J3DZMode mZMode;
/* 0x3A */ u8 mZCompLoc;
/* 0x3B */ u8 mDither;
#ifdef DUSK_TPHD
PolygonOffset mPolygonOffset;
#endif
/* 0x3C */ u32 mFogOffset;
}; // Size: 0x40

Expand Down
54 changes: 26 additions & 28 deletions libs/JSystem/include/JSystem/J3DGraphLoader/J3DMaterialFactory.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,13 @@ struct J3DMaterialInitData {
/* 0x14A */ BE(u16) mNBTScaleIdx;
}; // size 0x14C


#ifdef DUSK_TPHD
struct J3DMaterialInitData_MAT4 : public J3DMaterialInitData {
/* 0x14C */ BE(u16) mPolygonOffsetIdx;
}; // size 0x14E
#endif

/**
* @ingroup jsystem-j3d
*
Expand Down Expand Up @@ -85,33 +92,6 @@ struct J3DDisplayListInit {
/* 0x4 */ BE(u32) field_0x4;
}; // size 8

#if DUSK_TPHD
// MAT4 material-entry blocks have 2 trailing bytes per entry compared to MAT3.
// This strided view skips over the extras at indexing time, leaving the
// in-memory data untouched.
class J3DMaterialInitDataView {
public:
J3DMaterialInitDataView() : mpData(NULL), mStride(sizeof(J3DMaterialInitData)) {}

void set(const void* data, u32 stride) {
mpData = (u8*)data;
mStride = stride;
}

J3DMaterialInitData& operator[](int idx) {
return *(J3DMaterialInitData*)(mpData + (idx * mStride));
}

J3DMaterialInitData& operator[](int idx) const {
return *(J3DMaterialInitData*)(mpData + (idx * mStride));
}

private:
u8* mpData;
u32 mStride;
};
#endif

struct J3DTexCoord2Info;
class J3DCurrentMtxInfo;

Expand Down Expand Up @@ -170,11 +150,26 @@ class J3DMaterialFactory {
J3DNBTScale newNBTScale(int) const;

u16 getMaterialID(int idx) const { return mpMaterialID[idx]; }
#ifdef DUSK_TPHD
u8 getMaterialMode(int idx) const { return getMatInitData(idx)->mMaterialMode; }
#else
u8 getMaterialMode(int idx) const { return mpMaterialInitData[mpMaterialID[idx]].mMaterialMode; }
#endif

#if DUSK_TPHD
const PolygonOffset newPolygonOffset(int) const;

J3DMaterialInitData* getMatInitData(int idx) const {
static const u32 sInitDataSizes[] = {0, 0, 0x138, 0x14C, 0x14E};

return (J3DMaterialInitData*)((u8*)mpMaterialInitData + sInitDataSizes[mBlockType] * getMaterialID(idx));
}

u16 mBlockType;
#endif
/* 0x00 */ u16 mMaterialNum;
#if DUSK_TPHD
/* 0x04 */ J3DMaterialInitDataView mpMaterialInitData;
/* 0x04 */ void* mpMaterialInitData;
#else
/* 0x04 */ J3DMaterialInitData* mpMaterialInitData;
#endif
Expand Down Expand Up @@ -206,6 +201,9 @@ class J3DMaterialFactory {
/* 0x6C */ u8* mpZCompLoc;
/* 0x70 */ u8* mpDither;
/* 0x74 */ J3DNBTScaleInfo* mpNBTScaleInfo;
#ifdef DUSK_TPHD
PolygonOffset* mpPolygonOffsets;
#endif
/* 0x78 */ J3DDisplayListInit* mpDisplayListInit;
/* 0x7C */ J3DPatchingInfo* mpPatchingInfo;
/* 0x80 */ J3DCurrentMtxInfo* mpCurrentMtxInfo;
Expand Down
6 changes: 6 additions & 0 deletions libs/JSystem/include/JSystem/J3DGraphLoader/J3DModelLoader.h
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,12 @@ struct J3DMaterialBlock_v21 : public J3DModelBlock {
/* 0x74 */ OFFSET_PTR_V0 mpNBTScaleInfo;
};

#ifdef DUSK_TPHD
struct J3DMaterialBlock_MAT4 : public J3DMaterialBlock {
/* 0x84 */ OFFSET_PTR_V0 mpPolygonOffsets;
};
#endif

/**
* @ingroup jsystem-j3d
*
Expand Down
Loading
Loading