summaryrefslogtreecommitdiff
path: root/src/JSystem/J3DGraphBase/J3DDrawBuffer.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2025-09-04 07:56:59 -0700
committerGitHub <noreply@github.com>2025-09-04 17:56:59 +0300
commitb45a089e15d79821b07be020db628e01a49b1fd2 (patch)
tree948057548cc19b19d644bd4f300ca6434e6bff11 /src/JSystem/J3DGraphBase/J3DDrawBuffer.cpp
parentee8b843996f4d888903f8c125b95ec1af376877e (diff)
some J3D/misc cleanup (#2628)
* some j3d cleanup * begin using uintptr_t * j3dgraphbase cleanup * j3dgraphanimator cleanup
Diffstat (limited to 'src/JSystem/J3DGraphBase/J3DDrawBuffer.cpp')
-rw-r--r--src/JSystem/J3DGraphBase/J3DDrawBuffer.cpp199
1 files changed, 107 insertions, 92 deletions
diff --git a/src/JSystem/J3DGraphBase/J3DDrawBuffer.cpp b/src/JSystem/J3DGraphBase/J3DDrawBuffer.cpp
index 52a31e0d57..b1321abfb9 100644
--- a/src/JSystem/J3DGraphBase/J3DDrawBuffer.cpp
+++ b/src/JSystem/J3DGraphBase/J3DDrawBuffer.cpp
@@ -8,26 +8,27 @@
#include "JSystem/JKernel/JKRHeap.h"
void J3DDrawBuffer::calcZRatio() {
- mZRatio = (mZFar - mZNear) / (f32)mBufSize;
+ mZRatio = (mZFar - mZNear) / (f32)mEntryTableSize;
}
void J3DDrawBuffer::initialize() {
- mDrawType = DRAW_HEAD;
- mSortType = SORT_MAT;
+ mDrawMode = J3DDrawBufDrawMode_Head;
+ mSortMode = J3DDrawBufSortMode_Mat;
mZNear = 1.0f;
mZFar = 10000.0f;
mpZMtx = NULL;
mpCallBackPacket = NULL;
- mBufSize = 0x20;
+ mEntryTableSize = 0x20;
calcZRatio();
}
-J3DError J3DDrawBuffer::allocBuffer(u32 bufSize) {
- mpBuf = new (0x20) J3DPacket*[bufSize];
- if (mpBuf == NULL)
+int J3DDrawBuffer::allocBuffer(u32 size) {
+ mpBuffer = new (0x20) J3DPacket*[size];
+ if (mpBuffer == NULL)
return kJ3DError_Alloc;
- mBufSize = bufSize;
+ mEntryTableSize = size;
+
frameInit();
calcZRatio();
return kJ3DError_Success;
@@ -36,15 +37,15 @@ J3DError J3DDrawBuffer::allocBuffer(u32 bufSize) {
J3DDrawBuffer::~J3DDrawBuffer() {
frameInit();
- delete[] mpBuf;
- mpBuf = NULL;
+ delete[] mpBuffer;
+ mpBuffer = NULL;
}
/* 80325068-8032509C 31F9A8 0034+00 2/2 1/1 0/0 .text frameInit__13J3DDrawBufferFv */
void J3DDrawBuffer::frameInit() {
- u32 bufSize = mBufSize;
+ u32 bufSize = mEntryTableSize;
for (u32 i = 0; i < bufSize; i++)
- mpBuf[i] = NULL;
+ mpBuffer[i] = NULL;
mpCallBackPacket = NULL;
}
@@ -52,80 +53,89 @@ void J3DDrawBuffer::frameInit() {
/* 8032509C-803251E4 31F9DC 0148+00 2/1 0/0 0/0 .text
* entryMatSort__13J3DDrawBufferFP12J3DMatPacket */
int J3DDrawBuffer::entryMatSort(J3DMatPacket* pMatPacket) {
+ J3D_ASSERT_NULLPTR(122, pMatPacket != NULL);
+
pMatPacket->drawClear();
pMatPacket->getShapePacket()->drawClear();
if (pMatPacket->isChanged()) {
- pMatPacket->setNextPacket(mpBuf[0]);
- mpBuf[0] = pMatPacket;
+ pMatPacket->setNextPacket(mpBuffer[0]);
+ mpBuffer[0] = pMatPacket;
return 1;
}
- J3DTexture* texture = j3dSys.getTexture();
- u32 hash;
+ J3DTexture* pTexture = j3dSys.getTexture();
u16 texNo = pMatPacket->getMaterial()->getTexNo(0);
+ J3D_ASSERT_NULLPTR(150, pTexture != NULL);
+
+ u32 hash;
if (texNo == 0xFFFF) {
hash = 0;
} else {
- hash = ((u32)texture->getResTIMG(texNo) + texture->getResTIMG(texNo)->imageOffset) >> 5;
+ hash = ((uintptr_t)pTexture->getResTIMG(texNo) + pTexture->getResTIMG(texNo)->imageOffset) >> 5;
}
- u32 slot = hash & (mBufSize - 1);
+ u32 slot = hash & (mEntryTableSize - 1);
- if (mpBuf[slot] == NULL) {
- mpBuf[slot] = pMatPacket;
+ if (mpBuffer[slot] == NULL) {
+ mpBuffer[slot] = pMatPacket;
return 1;
- } else {
- for (J3DMatPacket* pkt = (J3DMatPacket*)mpBuf[slot]; pkt != NULL;
- pkt = (J3DMatPacket*)pkt->getNextPacket())
- {
- if (pkt->isSame(pMatPacket)) {
- pkt->addShapePacket(pMatPacket->getShapePacket());
- return 0;
- }
- }
+ }
- pMatPacket->setNextPacket(mpBuf[slot]);
- mpBuf[slot] = pMatPacket;
- return 1;
+ J3DMatPacket* packet;
+ for (packet = (J3DMatPacket*)mpBuffer[slot]; packet != NULL; packet = (J3DMatPacket*)packet->getNextPacket())
+ {
+ if (packet->isSame(pMatPacket)) {
+ packet->addShapePacket(pMatPacket->getShapePacket());
+ return 0;
+ }
}
+
+ pMatPacket->setNextPacket(mpBuffer[slot]);
+ mpBuffer[slot] = pMatPacket;
+ return 1;
}
/* 803251E4-8032529C 31FB24 00B8+00 1/0 0/0 0/0 .text
* entryMatAnmSort__13J3DDrawBufferFP12J3DMatPacket */
int J3DDrawBuffer::entryMatAnmSort(J3DMatPacket* pMatPacket) {
+ J3D_ASSERT_NULLPTR(199, pMatPacket != NULL);
+
J3DMaterialAnm* pMaterialAnm = pMatPacket->mpMaterialAnm;
- u32 slot = (u32)pMaterialAnm & (mBufSize - 1);
+ u32 slot = (uintptr_t)pMaterialAnm & (mEntryTableSize - 1);
if (pMaterialAnm == NULL) {
return entryMatSort(pMatPacket);
- } else {
- pMatPacket->drawClear();
- pMatPacket->getShapePacket()->drawClear();
- if (mpBuf[slot] == NULL) {
- mpBuf[slot] = pMatPacket;
- return 1;
- } else {
- for (J3DMatPacket* pkt = (J3DMatPacket*)mpBuf[slot]; pkt != NULL;
- pkt = (J3DMatPacket*)pkt->getNextPacket())
- {
- if (pkt->mpMaterialAnm == pMaterialAnm) {
- pkt->addShapePacket(pMatPacket->getShapePacket());
- return 0;
- }
- }
-
- pMatPacket->setNextPacket(mpBuf[slot]);
- mpBuf[slot] = pMatPacket;
- return 1;
+ }
+
+ pMatPacket->drawClear();
+ pMatPacket->getShapePacket()->drawClear();
+
+ if (mpBuffer[slot] == NULL) {
+ mpBuffer[slot] = pMatPacket;
+ return 1;
+ }
+
+ J3DMatPacket* packet;
+ for (packet = (J3DMatPacket*)mpBuffer[slot]; packet != NULL; packet = (J3DMatPacket*)packet->getNextPacket())
+ {
+ if (packet->mpMaterialAnm == pMaterialAnm) {
+ packet->addShapePacket(pMatPacket->getShapePacket());
+ return 0;
}
}
+
+ pMatPacket->setNextPacket(mpBuffer[slot]);
+ mpBuffer[slot] = pMatPacket;
+ return 1;
}
/* 8032529C-803253B4 31FBDC 0118+00 1/0 0/0 0/0 .text entryZSort__13J3DDrawBufferFP12J3DMatPacket
*/
-int J3DDrawBuffer::entryZSort(J3DMatPacket* i_packet) {
- i_packet->drawClear();
- i_packet->getShapePacket()->drawClear();
+int J3DDrawBuffer::entryZSort(J3DMatPacket* pMatPacket) {
+ J3D_ASSERT_NULLPTR(257, pMatPacket != NULL);
+
+ pMatPacket->drawClear();
+ pMatPacket->getShapePacket()->drawClear();
Vec tmp;
tmp.x = mpZMtx[0][3];
@@ -134,32 +144,33 @@ int J3DDrawBuffer::entryZSort(J3DMatPacket* i_packet) {
f32 value = -J3DCalcZValue(j3dSys.getViewMtx(), tmp);
- u32 uvar4;
+ u32 index;
if (mZNear + mZRatio < value) {
if (mZFar - mZRatio > value) {
- uvar4 = value / mZRatio;
+ index = value / mZRatio;
} else {
- uvar4 = mBufSize - 1;
+ index = mEntryTableSize - 1;
}
} else {
- uvar4 = 0;
+ index = 0;
}
- u32 idx = (mBufSize - 1) - uvar4;
- i_packet->setNextPacket(mpBuf[idx]);
- mpBuf[idx] = i_packet;
-
+ index = (mEntryTableSize - 1) - index;
+ pMatPacket->setNextPacket(mpBuffer[index]);
+ mpBuffer[index] = pMatPacket;
return 1;
}
/* 803253B4-80325404 31FCF4 0050+00 1/0 0/0 0/0 .text
* entryModelSort__13J3DDrawBufferFP12J3DMatPacket */
-int J3DDrawBuffer::entryModelSort(J3DMatPacket* i_packet) {
- i_packet->drawClear();
- i_packet->getShapePacket()->drawClear();
+int J3DDrawBuffer::entryModelSort(J3DMatPacket* pMatPacket) {
+ J3D_ASSERT_NULLPTR(316, pMatPacket != NULL);
+
+ pMatPacket->drawClear();
+ pMatPacket->getShapePacket()->drawClear();
if (mpCallBackPacket != NULL) {
- mpCallBackPacket->addChildPacket(i_packet);
+ mpCallBackPacket->addChildPacket(pMatPacket);
return 1;
}
@@ -168,57 +179,67 @@ int J3DDrawBuffer::entryModelSort(J3DMatPacket* i_packet) {
/* 80325404-80325458 31FD44 0054+00 1/0 0/0 0/0 .text
* entryInvalidSort__13J3DDrawBufferFP12J3DMatPacket */
-int J3DDrawBuffer::entryInvalidSort(J3DMatPacket* i_packet) {
- i_packet->drawClear();
- i_packet->getShapePacket()->drawClear();
+int J3DDrawBuffer::entryInvalidSort(J3DMatPacket* pMatPacket) {
+ J3D_ASSERT_NULLPTR(343, pMatPacket != NULL);
+
+ pMatPacket->drawClear();
+ pMatPacket->getShapePacket()->drawClear();
if (mpCallBackPacket != NULL) {
- mpCallBackPacket->addChildPacket(i_packet->getShapePacket());
+ mpCallBackPacket->addChildPacket(pMatPacket->getShapePacket());
return 1;
}
return 0;
}
-int J3DDrawBuffer::entryNonSort(J3DMatPacket* i_packet) {
- i_packet->drawClear();
- i_packet->mpShapePacket->drawClear();
+int J3DDrawBuffer::entryNonSort(J3DMatPacket* pMatPacket) {
+ J3D_ASSERT_NULLPTR(370, pMatPacket != NULL);
- i_packet->setNextPacket(mpBuf[0]);
- mpBuf[0] = i_packet;
+ pMatPacket->drawClear();
+ pMatPacket->getShapePacket()->drawClear();
+ pMatPacket->setNextPacket(mpBuffer[0]);
+ mpBuffer[0] = pMatPacket;
return 1;
}
-int J3DDrawBuffer::entryImm(J3DPacket* i_packet, u16 index) {
- i_packet->setNextPacket(mpBuf[index]);
- mpBuf[index] = i_packet;
+int J3DDrawBuffer::entryImm(J3DPacket* pPacket, u16 index) {
+ J3D_ASSERT_NULLPTR(394, pPacket != NULL);
+ J3D_ASSERT_RANGE(395, index < mEntryTableSize);
+ pPacket->setNextPacket(mpBuffer[index]);
+ mpBuffer[index] = pPacket;
return 1;
}
/* 803CEC30-803CEC78 02BD50 0048+00 0/1 1/1 0/0 .data sortFuncTable__13J3DDrawBuffer */
-sortFunc J3DDrawBuffer::sortFuncTable[6] = {
+J3DDrawBuffer::sortFunc J3DDrawBuffer::sortFuncTable[6] = {
&J3DDrawBuffer::entryMatSort, &J3DDrawBuffer::entryMatAnmSort, &J3DDrawBuffer::entryZSort,
&J3DDrawBuffer::entryModelSort, &J3DDrawBuffer::entryInvalidSort, &J3DDrawBuffer::entryNonSort,
};
/* 803CEC90-803CECA8 02BDB0 0018+00 1/2 0/0 0/0 .data drawFuncTable__13J3DDrawBuffer */
-drawFunc J3DDrawBuffer::drawFuncTable[2] = {
+J3DDrawBuffer::drawFunc J3DDrawBuffer::drawFuncTable[2] = {
&J3DDrawBuffer::drawHead,
&J3DDrawBuffer::drawTail,
};
+/* 804515E0-804515E8 000AE0 0004+04 0/0 1/1 0/0 .sbss entryNum__13J3DDrawBuffer */
+int J3DDrawBuffer::entryNum;
+
/* 803254AC-80325500 31FDEC 0054+00 0/0 2/2 0/0 .text draw__13J3DDrawBufferCFv */
void J3DDrawBuffer::draw() const {
- drawFunc func = drawFuncTable[mDrawType];
+ J3D_ASSERT_RANGE(411, mDrawMode < J3DDrawBufDrawMode_MAX);
+
+ drawFunc func = drawFuncTable[mDrawMode];
(this->*func)();
}
/* 80325500-80325578 31FE40 0078+00 1/0 0/0 0/0 .text drawHead__13J3DDrawBufferCFv */
void J3DDrawBuffer::drawHead() const {
- u32 size = mBufSize;
- J3DPacket** buf = mpBuf;
+ u32 size = mEntryTableSize;
+ J3DPacket** buf = mpBuffer;
for (u32 i = 0; i < size; i++) {
for (J3DPacket* packet = buf[i]; packet != NULL; packet = packet->getNextPacket()) {
@@ -229,15 +250,9 @@ void J3DDrawBuffer::drawHead() const {
/* 80325578-803255F0 31FEB8 0078+00 1/0 0/0 0/0 .text drawTail__13J3DDrawBufferCFv */
void J3DDrawBuffer::drawTail() const {
- int num = mBufSize - 1;
-
- for (int i = num; i >= 0; i--) {
- for (J3DPacket* packet = mpBuf[i]; packet != NULL; packet = packet->getNextPacket()) {
+ for (int i = mEntryTableSize - 1; i >= 0; i--) {
+ for (J3DPacket* packet = mpBuffer[i]; packet != NULL; packet = packet->getNextPacket()) {
packet->draw();
}
}
}
-
-/* ############################################################################################## */
-/* 804515E0-804515E8 000AE0 0004+04 0/0 1/1 0/0 .sbss entryNum__13J3DDrawBuffer */
-int J3DDrawBuffer::entryNum; \ No newline at end of file