Files
tp/include/JSystem/J3DGraphBase/J3DVertex.h
T

125 lines
4.0 KiB
C++
Raw Normal View History

2021-03-28 22:49:05 +02:00
#ifndef J3DVERTEX_H
#define J3DVERTEX_H
2023-05-12 12:10:14 -07:00
#include "dolphin/gx/GXAttr.h"
2021-11-10 10:56:51 -08:00
#include "dolphin/mtx/vec.h"
2021-03-28 22:49:05 +02:00
#include "dolphin/types.h"
2023-05-12 12:10:14 -07:00
typedef struct _GXColor GXColor;
2021-10-11 09:38:53 -07:00
class J3DModel;
2023-09-04 16:17:51 -07:00
class J3DAnmVtxColor;
class J3DVertexBuffer;
2021-10-11 09:38:53 -07:00
struct J3DVtxColorCalc {
/* 8032E180 */ void calc(J3DModel*);
2023-07-14 11:30:07 +03:00
virtual void calc(J3DVertexBuffer*);
2021-10-11 09:38:53 -07:00
/* 0x0 */ void* vtable; // inlined vtable?
/* 0x4 */ u32 mFlags;
/* 0x8 */ J3DAnmVtxColor* mpVtxColor;
};
class J3DVertexData {
public:
J3DVertexData();
void* getVtxPosArray() const { return mVtxPosArray; }
void* getVtxNrmArray() const { return mVtxNrmArray; }
2022-04-24 01:25:34 -07:00
GXColor* getVtxColorArray(u8 idx) const { return mVtxColorArray[idx]; }
void* getVtxTexCoordArray(u8 idx) const { return mVtxTexCoordArray[idx]; }
void* getVtxNBTArray() const { return mVtxNBTArray; }
2021-10-11 09:38:53 -07:00
u32 getNrmNum() const { return mNrmNum; }
u32 getVtxNum() const { return mVtxNum; }
2022-04-23 18:58:35 -07:00
GXVtxAttrFmtList* getVtxAttrFmtList() { return mVtxAttrFmtList; }
2023-07-14 11:30:07 +03:00
u8 getVtxPosFrac() { return mVtxPosFrac; }
u8 getVtxNrmFrac() { return mVtxNrmFrac; }
int getVtxPosType() { return mVtxPosType; }
int getVtxNrmType() { return mVtxNrmType; }
2022-04-23 18:58:35 -07:00
2022-04-24 01:25:34 -07:00
void setVtxPosFrac(u8 frac) { mVtxPosFrac = frac; }
void setVtxPosType(GXCompType type) { mVtxPosType = type; }
void setVtxNrmFrac(u8 frac) { mVtxNrmFrac = frac; }
void setVtxNrmType(GXCompType type) { mVtxNrmType = type; }
2021-10-11 09:38:53 -07:00
private:
2023-11-08 22:56:00 -05:00
friend class J3DModelLoader;
2021-10-11 09:38:53 -07:00
/* 0x00 */ u32 mVtxNum;
/* 0x04 */ u32 mNrmNum;
/* 0x08 */ u32 mColNum;
2022-04-24 01:41:27 -07:00
/* 0x0C */ u32 mTexCoordNum;
/* 0x10 */ u32 mPacketNum;
2022-04-23 18:58:35 -07:00
/* 0x14 */ GXVtxAttrFmtList* mVtxAttrFmtList;
2021-10-11 09:38:53 -07:00
/* 0x18 */ void* mVtxPosArray;
/* 0x1C */ void* mVtxNrmArray;
/* 0x20 */ void* mVtxNBTArray;
2022-04-23 18:58:35 -07:00
/* 0x24 */ GXColor* mVtxColorArray[2];
2021-10-11 09:38:53 -07:00
/* 0x2C */ void* mVtxTexCoordArray[8];
/* 0x4C */ u8 mVtxPosFrac;
2022-04-23 18:58:35 -07:00
/* 0x50 */ GXCompType mVtxPosType;
2021-10-11 09:38:53 -07:00
/* 0x54 */ u8 mVtxNrmFrac;
2022-04-23 18:58:35 -07:00
/* 0x58 */ GXCompType mVtxNrmType;
2021-10-11 09:38:53 -07:00
};
class J3DVertexBuffer {
public:
J3DVertexBuffer() { init(); }
2021-10-11 09:38:53 -07:00
/* 80310F78 */ void setVertexData(J3DVertexData*);
/* 80310FD8 */ void init();
/* 80311030 */ ~J3DVertexBuffer();
/* 8031106C */ void setArray() const;
/* 80311090 */ s32 copyLocalVtxPosArray(u32);
/* 803111B0 */ s32 copyLocalVtxNrmArray(u32);
/* 803112D0 */ s32 copyLocalVtxArray(u32);
/* 80311478 */ s32 allocTransformedVtxPosArray();
/* 8031152C */ s32 allocTransformedVtxNrmArray();
void setCurrentVtxPos(void* pVtxPos) { mCurrentVtxPos = pVtxPos; }
2023-07-14 11:30:07 +03:00
void* getCurrentVtxPos() { return mCurrentVtxPos; }
2021-10-11 09:38:53 -07:00
void setCurrentVtxNrm(void* pVtxNrm) { mCurrentVtxNrm = pVtxNrm; }
2023-07-14 11:30:07 +03:00
void* getCurrentVtxNrm() { return mCurrentVtxNrm; }
2021-10-11 09:38:53 -07:00
2022-04-23 18:58:35 -07:00
void setCurrentVtxCol(GXColor* pVtxCol) { mCurrentVtxCol = pVtxCol; }
2021-10-11 09:38:53 -07:00
void frameInit() {
setCurrentVtxPos(mVtxPosArray[0]);
setCurrentVtxNrm(mVtxNrmArray[0]);
setCurrentVtxCol(mVtxColArray[0]);
}
2023-07-14 11:30:07 +03:00
void* getTransformedVtxPos(int idx) { return mTransformedVtxPosArray[idx]; }
void* getTransformedVtxNrm(int idx) { return mTransformedVtxNrmArray[idx]; }
J3DVertexData* getVertexData() { return mVtxData; }
void swapTransformedVtxPos() {
void* tmp = mTransformedVtxPosArray[0];
mTransformedVtxPosArray[0] = mTransformedVtxPosArray[1];
mTransformedVtxPosArray[1] = tmp;
}
void swapTransformedVtxNrm() {
void* tmp = mTransformedVtxNrmArray[0];
mTransformedVtxNrmArray[0] = mTransformedVtxNrmArray[1];
mTransformedVtxNrmArray[1] = tmp;
}
2021-10-11 09:38:53 -07:00
private:
/* 0x00 */ J3DVertexData* mVtxData;
/* 0x04 */ void* mVtxPosArray[2];
/* 0x0C */ void* mVtxNrmArray[2];
2022-04-23 18:58:35 -07:00
/* 0x14 */ GXColor* mVtxColArray[2];
2021-10-11 09:38:53 -07:00
/* 0x1C */ void* mTransformedVtxPosArray[2];
/* 0x24 */ void* mTransformedVtxNrmArray[2];
/* 0x2C */ void* mCurrentVtxPos;
/* 0x30 */ void* mCurrentVtxNrm;
2022-04-23 18:58:35 -07:00
/* 0x34 */ GXColor* mCurrentVtxCol;
2021-10-11 09:38:53 -07:00
}; // Size: 0x38
struct VertexNormal {
2021-11-10 10:56:51 -08:00
Vec data;
2021-10-11 09:38:53 -07:00
};
2021-03-28 22:49:05 +02:00
#endif /* J3DVERTEX_H */