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

153 lines
4.4 KiB
C++
Raw Normal View History

2021-03-28 22:49:05 +02:00
#ifndef J3DVERTEX_H
#define J3DVERTEX_H
#include <dolphin/gx.h>
#include "dolphin/mtx.h"
2021-03-28 22:49:05 +02:00
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
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-j3d
*
*/
2021-10-11 09:38:53 -07:00
struct J3DVtxColorCalc {
2025-11-30 14:23:42 -08:00
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;
};
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-j3d
*
*/
2021-10-11 09:38:53 -07:00
class J3DVertexData {
public:
J3DVertexData();
2025-09-04 07:56:59 -07:00
~J3DVertexData() {}
2021-10-11 09:38:53 -07:00
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; }
2025-06-20 02:41:43 -04:00
GXVtxAttrFmtList* getVtxAttrFmtList() const { return mVtxAttrFmtList; }
2025-09-04 07:56:59 -07:00
u8 getVtxPosFrac() const { return mVtxPosFrac; }
u8 getVtxNrmFrac() const { return mVtxNrmFrac; }
int getVtxPosType() const { return mVtxPosType; }
int getVtxNrmType() const { 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
};
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-j3d
*
*/
2021-10-11 09:38:53 -07:00
class J3DVertexBuffer {
public:
J3DVertexBuffer() { init(); }
2025-11-30 14:23:42 -08:00
void setVertexData(J3DVertexData*);
void init();
~J3DVertexBuffer();
void setArray() const;
s32 copyLocalVtxPosArray(u32);
s32 copyLocalVtxNrmArray(u32);
s32 copyLocalVtxArray(u32);
s32 allocTransformedVtxPosArray();
s32 allocTransformedVtxNrmArray();
2021-10-11 09:38:53 -07:00
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]; }
2025-04-16 00:09:31 +03:00
J3DVertexData* getVertexData() const { return mVtxData; }
2023-07-14 11:30:07 +03:00
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;
}
2024-01-22 07:23:54 -08:00
void swapVtxPosArrayPointer() {
void* temp = mVtxPosArray[0];
mVtxPosArray[0] = mVtxPosArray[1];
mVtxPosArray[1] = temp;
}
void swapVtxNrmArrayPointer() {
void* temp = mVtxNrmArray[0];
mVtxNrmArray[0] = mVtxNrmArray[1];
mVtxNrmArray[1] = temp;
}
void* getVtxPosArrayPointer(int index) {
return mVtxPosArray[index];
}
void* getVtxNrmArrayPointer(int index) {
return mVtxNrmArray[index];
}
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
2021-03-28 22:49:05 +02:00
#endif /* J3DVERTEX_H */