mirror of
https://github.com/encounter/tp.git
synced 2026-07-11 06:18:46 -07:00
move jasper's jsystem work over
This commit is contained in:
@@ -7,7 +7,6 @@
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
#include "JSystem/J3DGraphBase/J3DPacket.h"
|
||||
|
||||
//
|
||||
@@ -255,14 +254,10 @@ SECTION_DATA drawFunc J3DDrawBuffer::drawFuncTable[2] = {
|
||||
};
|
||||
|
||||
/* 803254AC-80325500 31FDEC 0054+00 0/0 2/2 0/0 .text draw__13J3DDrawBufferCFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void J3DDrawBuffer::draw() const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphBase/J3DDrawBuffer/draw__13J3DDrawBufferCFv.s"
|
||||
void J3DDrawBuffer::draw() const {
|
||||
drawFunc func = drawFuncTable[mDrawType];
|
||||
(this->*func)();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 80325500-80325578 31FE40 0078+00 1/0 0/0 0/0 .text drawHead__13J3DDrawBufferCFv */
|
||||
void J3DDrawBuffer::drawHead() const {
|
||||
@@ -277,28 +272,15 @@ void J3DDrawBuffer::drawHead() const {
|
||||
}
|
||||
|
||||
/* 80325578-803255F0 31FEB8 0078+00 1/0 0/0 0/0 .text drawTail__13J3DDrawBufferCFv */
|
||||
// flipped regs
|
||||
#ifdef NONMATCHING
|
||||
void J3DDrawBuffer::drawTail() const {
|
||||
int i = mBufSize - 1;
|
||||
J3DPacket** buf = mpBuf;
|
||||
int num = mBufSize - 1;
|
||||
|
||||
for (; i >= 0; i--) {
|
||||
for (J3DPacket* packet = buf[i]; packet != NULL; packet = packet->getNextPacket()) {
|
||||
for (int i = num; i >= 0; i--) {
|
||||
for (J3DPacket* packet = mpBuf[i]; packet != NULL; packet = packet->getNextPacket()) {
|
||||
packet->draw();
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void J3DDrawBuffer::drawTail() const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphBase/J3DDrawBuffer/drawTail__13J3DDrawBufferCFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 804515E0-804515E8 000AE0 0004+04 0/0 1/1 0/0 .sbss entryNum__13J3DDrawBuffer */
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#include "JSystem/J3DGraphBase/J3DPacket.h"
|
||||
#include "JSystem/J3DGraphAnimator/J3DModel.h"
|
||||
#include "JSystem/J3DGraphBase/J3DDrawBuffer.h"
|
||||
#include "JSystem/J3DGraphBase/J3DMaterial.h"
|
||||
#include "JSystem/J3DGraphBase/J3DShape.h"
|
||||
#include "JSystem/J3DGraphBase/J3DShapeMtx.h"
|
||||
@@ -18,14 +19,6 @@
|
||||
#include "dolphin/types.h"
|
||||
#include "global.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct J3DDrawBuffer {
|
||||
static u8 sortFuncTable[72];
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
@@ -97,8 +90,10 @@ J3DError J3DDisplayListObj::newDisplayList(u32 capacity) {
|
||||
mpData[0] = new (0x20) char[mCapacity];
|
||||
mpData[1] = new (0x20) char[mCapacity];
|
||||
mSize = 0;
|
||||
|
||||
if (mpData[0] == NULL || mpData[1] == NULL)
|
||||
return kJ3DError_Alloc;
|
||||
|
||||
return kJ3DError_Success;
|
||||
}
|
||||
|
||||
@@ -107,8 +102,10 @@ J3DError J3DDisplayListObj::newSingleDisplayList(u32 capacity) {
|
||||
mpData[0] = new (0x20) char[mCapacity];
|
||||
mpData[1] = mpData[0];
|
||||
mSize = 0;
|
||||
|
||||
if (mpData[0] == NULL)
|
||||
return kJ3DError_Alloc;
|
||||
|
||||
return kJ3DError_Success;
|
||||
}
|
||||
|
||||
@@ -116,8 +113,10 @@ J3DError J3DDisplayListObj::newSingleDisplayList(u32 capacity) {
|
||||
J3DError J3DDisplayListObj::single_To_Double() {
|
||||
if (mpData[0] == mpData[1]) {
|
||||
mpData[1] = new (0x20) char[mCapacity];
|
||||
|
||||
if (mpData[1] == NULL)
|
||||
return kJ3DError_Alloc;
|
||||
|
||||
memcpy(mpData[1], mpData[0], mCapacity);
|
||||
DCStoreRange(mpData[1], mCapacity);
|
||||
}
|
||||
@@ -182,61 +181,28 @@ u32 J3DDisplayListObj::endPatch() {
|
||||
}
|
||||
|
||||
/* 80312750-80312758 30D090 0008+00 3/0 16/0 10/0 .text entry__9J3DPacketFP13J3DDrawBuffer */
|
||||
bool J3DPacket::entry(J3DDrawBuffer* param_0) {
|
||||
return true;
|
||||
int J3DPacket::entry(J3DDrawBuffer*) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
void J3DPacket::addChildPacket(J3DPacket* pPacket) {
|
||||
if (mpFirstChild == NULL) {
|
||||
mpFirstChild = pPacket;
|
||||
} else {
|
||||
pPacket->mpNextSibling = mpFirstChild;
|
||||
pPacket->mpNextPacket = mpFirstChild;
|
||||
mpFirstChild = pPacket;
|
||||
}
|
||||
}
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CD900-803CD920 02AA20 0020+00 1/1 0/0 0/0 .data sDifferedRegister */
|
||||
SECTION_DATA static u32 sDifferedRegister[8] = {0x00000004, 0x00000001, 0x00000002, 0x01000000,
|
||||
0x10000000, 0x20000000, 0x02000000, 0x08000000};
|
||||
SECTION_DATA static u32 sDifferedRegister[8] = {
|
||||
0x00000004, 0x00000001, 0x00000002, 0x01000000, 0x10000000, 0x20000000, 0x02000000, 0x08000000,
|
||||
};
|
||||
|
||||
/* 803CD920-803CD940 02AA40 0020+00 1/1 0/0 0/0 .data sSizeOfDiffered */
|
||||
SECTION_DATA static s32 sSizeOfDiffered[8] = {13, 13, 21, 120, 55, 15, 19, 45};
|
||||
|
||||
/* 803CD940-803CD954 02AA60 0014+00 2/2 0/0 0/0 .data __vt__14J3DShapePacket */
|
||||
SECTION_DATA extern void* __vt__14J3DShapePacket[5] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)entry__9J3DPacketFP13J3DDrawBuffer,
|
||||
(void*)draw__14J3DShapePacketFv,
|
||||
(void*)__dt__14J3DShapePacketFv,
|
||||
};
|
||||
|
||||
/* 803CD954-803CD968 02AA74 0014+00 2/2 0/0 0/0 .data __vt__12J3DMatPacket */
|
||||
SECTION_DATA extern void* __vt__12J3DMatPacket[5] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)entry__12J3DMatPacketFP13J3DDrawBuffer,
|
||||
(void*)draw__12J3DMatPacketFv,
|
||||
(void*)__dt__12J3DMatPacketFv,
|
||||
};
|
||||
|
||||
/* 803CD968-803CD97C 02AA88 0014+00 2/2 0/0 0/0 .data __vt__13J3DDrawPacket */
|
||||
SECTION_DATA extern void* __vt__13J3DDrawPacket[5] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)entry__9J3DPacketFP13J3DDrawBuffer,
|
||||
(void*)draw__13J3DDrawPacketFv,
|
||||
(void*)__dt__13J3DDrawPacketFv,
|
||||
};
|
||||
|
||||
/* 803CD97C-803CD990 02AA9C 0014+00 2/2 34/34 23/23 .data __vt__9J3DPacket */
|
||||
SECTION_DATA extern void* __vt__9J3DPacket[5] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)entry__9J3DPacketFP13J3DDrawBuffer,
|
||||
(void*)draw__9J3DPacketFv,
|
||||
(void*)__dt__9J3DPacketFv,
|
||||
SECTION_DATA static s32 sSizeOfDiffered[8] = {
|
||||
13, 13, 21, 120, 55, 15, 19, 45,
|
||||
};
|
||||
|
||||
/* 80312778-803127B0 30D0B8 0038+00 2/2 0/0 0/0 .text __ct__13J3DDrawPacketFv */
|
||||
@@ -287,7 +253,7 @@ J3DMatPacket::J3DMatPacket() {
|
||||
mpInitShapePacket = NULL;
|
||||
mpShapePacket = NULL;
|
||||
mpMaterial = NULL;
|
||||
mSortFlags = -1;
|
||||
mDiffFlag = -1;
|
||||
mpTexture = NULL;
|
||||
mpMaterialAnm = NULL;
|
||||
}
|
||||
@@ -299,7 +265,7 @@ void J3DMatPacket::addShapePacket(J3DShapePacket* pShape) {
|
||||
if (mpShapePacket == NULL) {
|
||||
mpShapePacket = pShape;
|
||||
} else {
|
||||
pShape->mpNextSibling = mpShapePacket;
|
||||
pShape->mpNextPacket = mpShapePacket;
|
||||
mpShapePacket = pShape;
|
||||
}
|
||||
}
|
||||
@@ -316,7 +282,7 @@ void J3DMatPacket::endDiff() {
|
||||
bool J3DMatPacket::isSame(J3DMatPacket* pOther) const {
|
||||
bool isSame = false;
|
||||
|
||||
if (mSortFlags == pOther->mSortFlags && !(mSortFlags >> 0x1F)) {
|
||||
if (mDiffFlag == pOther->mDiffFlag && !(mDiffFlag >> 0x1F)) {
|
||||
isSame = true;
|
||||
}
|
||||
return isSame;
|
||||
@@ -430,6 +396,7 @@ asm void J3DShapePacket::prepareDraw() const {
|
||||
void J3DShapePacket::draw() {
|
||||
if (!checkFlag(J3DShpFlag_Hidden) && mpShape != NULL) {
|
||||
prepareDraw();
|
||||
|
||||
if (mpTexMtx != NULL) {
|
||||
J3DMaterial* material = mpShape->getMaterial();
|
||||
J3DDifferedTexMtx::sTexGenBlock = material->getTexGenBlock();
|
||||
@@ -437,9 +404,11 @@ void J3DShapePacket::draw() {
|
||||
} else {
|
||||
J3DDifferedTexMtx::sTexGenBlock = NULL;
|
||||
}
|
||||
|
||||
if (mpDisplayListObj != NULL) {
|
||||
mpDisplayListObj->callDL();
|
||||
}
|
||||
|
||||
mpShape->draw();
|
||||
}
|
||||
}
|
||||
@@ -448,6 +417,7 @@ void J3DShapePacket::draw() {
|
||||
void J3DShapePacket::drawFast() {
|
||||
if (!checkFlag(J3DShpFlag_Hidden) && mpShape != NULL) {
|
||||
prepareDraw();
|
||||
|
||||
if (mpTexMtx != NULL) {
|
||||
J3DMaterial* material = mpShape->getMaterial();
|
||||
J3DDifferedTexMtx::sTexGenBlock = material->getTexGenBlock();
|
||||
@@ -455,21 +425,16 @@ void J3DShapePacket::drawFast() {
|
||||
} else {
|
||||
J3DDifferedTexMtx::sTexGenBlock = NULL;
|
||||
}
|
||||
|
||||
mpShape->drawFast();
|
||||
}
|
||||
}
|
||||
|
||||
/* 80313044-80313048 30D984 0004+00 1/0 0/0 0/0 .text draw__9J3DPacketFv */
|
||||
void J3DPacket::draw() {
|
||||
/* empty function */
|
||||
}
|
||||
void J3DPacket::draw() {}
|
||||
|
||||
/* 80313048-803130A8 30D988 0060+00 1/0 0/0 0/0 .text entry__12J3DMatPacketFP13J3DDrawBuffer */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm bool J3DMatPacket::entry(J3DDrawBuffer* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphBase/J3DPacket/entry__12J3DMatPacketFP13J3DDrawBuffer.s"
|
||||
int J3DMatPacket::entry(J3DDrawBuffer* i_buffer) {
|
||||
sortFunc func = J3DDrawBuffer::sortFuncTable[i_buffer->mSortType];
|
||||
return (i_buffer->*func)(this);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
@@ -26,7 +26,7 @@ u32 J3DShapeDraw::countVertex(u32 stride) {
|
||||
u32 count = 0;
|
||||
u32 dlStart = (u32)getDisplayList();
|
||||
for (u8* dl = (u8*)dlStart; ((u32)dl - dlStart) < getDisplayListSize();) {
|
||||
if (*dl != 0xA0 && *dl != 0x98)
|
||||
if (*dl != GX_TRIANGLEFAN && *dl != GX_TRIANGLESTRIP)
|
||||
break;
|
||||
u16 vtxNum = *((u16*)(dl + 1));
|
||||
count += vtxNum;
|
||||
@@ -50,7 +50,7 @@ void J3DShapeDraw::addTexMtxIndexInDL(u32 stride, u32 attrOffs, u32 valueBase) {
|
||||
u8 h = *oldDL;
|
||||
*newDL++ = h;
|
||||
|
||||
if (h != 0xA0 && h != 0x98)
|
||||
if (h != GX_TRIANGLEFAN && h != GX_TRIANGLESTRIP)
|
||||
break;
|
||||
|
||||
// Copy count
|
||||
@@ -82,7 +82,6 @@ void J3DShapeDraw::addTexMtxIndexInDL(u32 stride, u32 attrOffs, u32 valueBase) {
|
||||
DCStoreRange(newDLStart, mDisplayListSize);
|
||||
}
|
||||
#else
|
||||
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -91,7 +90,6 @@ asm void J3DShapeDraw::addTexMtxIndexInDL(u32 param_0, u32 param_1, u32 param_2)
|
||||
#include "asm/JSystem/J3DGraphBase/J3DShapeDraw/addTexMtxIndexInDL__12J3DShapeDrawFUlUlUl.s"
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
#endif
|
||||
|
||||
/* 80314ABC-80314AD4 30F3FC 0018+00 0/0 1/1 0/0 .text __ct__12J3DShapeDrawFPCUcUl */
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
//
|
||||
|
||||
#include "JSystem/J3DGraphLoader/J3DJointFactory.h"
|
||||
#include "JSystem/J3DGraphAnimator/J3DJoint.h"
|
||||
#include "JSystem/JSupport/JSupport.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
@@ -11,64 +13,31 @@
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct J3DJointBlock {};
|
||||
|
||||
struct J3DJointFactory {
|
||||
/* 80337178 */ J3DJointFactory(J3DJointBlock const&);
|
||||
/* 803371D0 */ void create(int);
|
||||
};
|
||||
|
||||
struct J3DJoint {
|
||||
/* 8032F170 */ J3DJoint();
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void __ct__15J3DJointFactoryFRC13J3DJointBlock();
|
||||
extern "C" void create__15J3DJointFactoryFi();
|
||||
extern "C" void func_80337338(void* _this, void const*, u32);
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void* __nw__FUl();
|
||||
extern "C" void __ct__8J3DJointFv();
|
||||
extern "C" void func_8033677C(void* _this, void const*, u32);
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
extern "C" u16* func_8033677C(const void*, const void*); // JSUConvertOffsetToPtr<u16>
|
||||
|
||||
/* 80337178-803371D0 331AB8 0058+00 0/0 1/1 0/0 .text __ct__15J3DJointFactoryFRC13J3DJointBlock */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm J3DJointFactory::J3DJointFactory(J3DJointBlock const& param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphLoader/J3DJointFactory/__ct__15J3DJointFactoryFRC13J3DJointBlock.s"
|
||||
J3DJointFactory::J3DJointFactory(J3DJointBlock const& block) {
|
||||
mJointInitData = JSUConvertOffsetToPtr<J3DJointInitData>(&block, block.mJointInitData);
|
||||
|
||||
// Fix when we have our ODR working.
|
||||
// mIndexTable = JSUConvertOffsetToPtr<u16>(&block, block.mIndexTable);
|
||||
mIndexTable = func_8033677C(&block, block.mIndexTable);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 803371D0-80337338 331B10 0168+00 0/0 1/1 0/0 .text create__15J3DJointFactoryFi */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void J3DJointFactory::create(int param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphLoader/J3DJointFactory/create__15J3DJointFactoryFi.s"
|
||||
}
|
||||
#pragma pop
|
||||
J3DJoint* J3DJointFactory::create(int no) {
|
||||
J3DJoint* joint = new J3DJoint();
|
||||
joint->mJntNo = no;
|
||||
joint->mKind = getKind(no);
|
||||
joint->mScaleCompensate = getScaleCompensate(no);
|
||||
joint->mTransformInfo = getTransformInfo(no);
|
||||
joint->mBoundingSphereRadius = getRadius(no);
|
||||
joint->mMin = getMin(no);
|
||||
joint->mMax = getMax(no);
|
||||
joint->mMtxCalc = NULL;
|
||||
|
||||
/* 80337338-80337350 331C78 0018+00 1/1 0/0 0/0 .text
|
||||
* JSUConvertOffsetToPtr<16J3DJointInitData>__FPCvUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
extern "C" asm void func_80337338(void* _this, void const* param_0, u32 param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphLoader/J3DJointFactory/func_80337338.s"
|
||||
}
|
||||
#pragma pop
|
||||
if (joint->mScaleCompensate == 0xFF)
|
||||
joint->mScaleCompensate = 0;
|
||||
|
||||
return joint;
|
||||
}
|
||||
Reference in New Issue
Block a user