diff options
Diffstat (limited to 'libs/JSystem/J3DGraphBase/J3DDrawBuffer.cpp')
| -rw-r--r-- | libs/JSystem/J3DGraphBase/J3DDrawBuffer.cpp | 132 |
1 files changed, 56 insertions, 76 deletions
diff --git a/libs/JSystem/J3DGraphBase/J3DDrawBuffer.cpp b/libs/JSystem/J3DGraphBase/J3DDrawBuffer.cpp index e6077324eb..bd429fb830 100644 --- a/libs/JSystem/J3DGraphBase/J3DDrawBuffer.cpp +++ b/libs/JSystem/J3DGraphBase/J3DDrawBuffer.cpp @@ -4,44 +4,11 @@ // #include "JSystem/J3DGraphBase/J3DDrawBuffer.h" +#include "JSystem/JKernel/JKRHeap.h" #include "dol2asm.h" #include "dolphin/types.h" -// -// Types: -// - -struct J3DShapePacket {}; - -struct J3DPacket { - /* 80312758 */ void addChildPacket(J3DPacket*); -}; - -struct J3DMatPacket { - /* 80312A04 */ void addShapePacket(J3DShapePacket*); - /* 80312A74 */ void isSame(J3DMatPacket*) const; -}; - -struct J3DDrawBuffer { - /* 80324F08 */ void initialize(); - /* 80324F70 */ void allocBuffer(u32); - /* 80325008 */ ~J3DDrawBuffer(); - /* 80325068 */ void frameInit(); - /* 8032509C */ void entryMatSort(J3DMatPacket*); - /* 803251E4 */ void entryMatAnmSort(J3DMatPacket*); - /* 8032529C */ void entryZSort(J3DMatPacket*); - /* 803253B4 */ void entryModelSort(J3DMatPacket*); - /* 80325404 */ void entryInvalidSort(J3DMatPacket*); - /* 80325458 */ void entryNonSort(J3DMatPacket*); - /* 8032548C */ void entryImm(J3DPacket*, u16); - /* 803254AC */ void draw() const; - /* 80325500 */ void drawHead() const; - /* 80325578 */ void drawTail() const; - - static u8 sortFuncTable[72]; - static u8 drawFuncTable[24]; - static u8 entryNum[4 + 4 /* padding */]; -}; +#include "JSystem/J3DGraphBase/J3DPacket.h" // // Forward References: @@ -98,35 +65,51 @@ SECTION_SDATA2 static f32 lit_782 = 10000.0f; /* 80456408-80456410 004A08 0008+00 2/2 0/0 0/0 .sdata2 @784 */ SECTION_SDATA2 static f64 lit_784 = 4503599627370496.0 /* cast u32 to float */; -/* 80324F08-80324F70 31F848 0068+00 0/0 1/1 0/0 .text initialize__13J3DDrawBufferFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DDrawBuffer::initialize() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DDrawBuffer/initialize__13J3DDrawBufferFv.s" +void J3DDrawBuffer::calcZRatio() { + mZRatio = (mZFar - mZNear) / (f32)mBufSize; } -#pragma pop -/* 80324F70-80325008 31F8B0 0098+00 0/0 1/1 0/0 .text allocBuffer__13J3DDrawBufferFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DDrawBuffer::allocBuffer(u32 param_0) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DDrawBuffer/allocBuffer__13J3DDrawBufferFUl.s" +void J3DDrawBuffer::initialize() { + mDrawType = 0; + mSortType = 0; + mZNear = lit_781; + mZFar = lit_782; + mpZMtx = NULL; + mpCallBackPacket = NULL; + mBufSize = 0x20; + calcZRatio(); } -#pragma pop -/* 80325008-80325068 31F948 0060+00 0/0 2/2 0/0 .text __dt__13J3DDrawBufferFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm J3DDrawBuffer::~J3DDrawBuffer() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DDrawBuffer/__dt__13J3DDrawBufferFv.s" +J3DError J3DDrawBuffer::allocBuffer(u32 bufSize) { + mpBuf = new (0x20) J3DPacket*[bufSize]; + if (mpBuf == NULL) + return kJ3DError_Alloc; + + mBufSize = bufSize; + frameInit(); + calcZRatio(); + return kJ3DError_Success; } -#pragma pop + +J3DDrawBuffer::~J3DDrawBuffer() { + frameInit(); + + delete[] mpBuf; + mpBuf = NULL; +} + +#if NON_MATCHING + +/* 80325068-8032509C 31F9A8 0034+00 2/2 1/1 0/0 .text frameInit__13J3DDrawBufferFv */ +void J3DDrawBuffer::frameInit() { + // can't make mwcc not generate "mtctr" for this loop + for (int i = 0; i < mBufSize; i++) + mpBuf[i] = NULL; + + mpCallBackPacket = NULL; +} + +#else /* 80325068-8032509C 31F9A8 0034+00 2/2 1/1 0/0 .text frameInit__13J3DDrawBufferFv */ #pragma push @@ -138,6 +121,8 @@ asm void J3DDrawBuffer::frameInit() { } #pragma pop +#endif + /* 8032509C-803251E4 31F9DC 0148+00 2/1 0/0 0/0 .text * entryMatSort__13J3DDrawBufferFP12J3DMatPacket */ #pragma push @@ -193,26 +178,21 @@ asm void J3DDrawBuffer::entryInvalidSort(J3DMatPacket* param_0) { } #pragma pop -/* 80325458-8032548C 31FD98 0034+00 1/0 0/0 0/0 .text - * entryNonSort__13J3DDrawBufferFP12J3DMatPacket */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DDrawBuffer::entryNonSort(J3DMatPacket* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DDrawBuffer/entryNonSort__13J3DDrawBufferFP12J3DMatPacket.s" +bool J3DDrawBuffer::entryNonSort(J3DMatPacket* pMat) { + pMat->clear(); + pMat->mpFirstShapePacket->clear(); + + // inlined copy of entryImm, add to start of buf + pMat->mpNextSibling = mpBuf[0]; + mpBuf[0] = pMat; + return true; } -#pragma pop -/* 8032548C-803254AC 31FDCC 0020+00 0/0 8/8 9/9 .text entryImm__13J3DDrawBufferFP9J3DPacketUs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DDrawBuffer::entryImm(J3DPacket* param_0, u16 param_1) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DDrawBuffer/entryImm__13J3DDrawBufferFP9J3DPacketUs.s" +bool J3DDrawBuffer::entryImm(J3DPacket* pPacket, u16 index) { + pPacket->mpNextSibling = mpBuf[index]; + mpBuf[index] = pPacket; + return true; } -#pragma pop /* ############################################################################################## */ /* 803CEBE8-803CEBF4 -00001 000C+00 1/1 0/0 0/0 .data @992 */ |
