Files
Petari/source/Game/System/DrawSyncManager.cpp

96 lines
1.8 KiB
C++

#include "Game/System/DrawSyncManager.hpp"
DrawSyncManager* DrawSyncManager::start(u32 a1, s32 a2) {
if (!DrawSyncManager::sInstance) {
DrawSyncManager::sInstance = new DrawSyncManager(a1, a2);
}
return DrawSyncManager::sInstance;
}
void DrawSyncManager::prepareReset() {
if (!DrawSyncManager::sInstance) {
return;
}
DrawSyncManager::sInstance->reset(true);
}
void DrawSyncManager::resetIfAborted() {
if (!DrawSyncManager::sInstance) {
return;
}
DrawSyncManager::sInstance->reset(false);
}
void DrawSyncManager::clearFifo() {
while (mFifo->getCount() != 0) {
mFifo->pop();
}
}
Fifo* Fifo::pop() {
Fifo* cur = mArray[mLoopIdx];
mLoopIdx = getLoopIdx(mLoopIdx + 1);
return cur;
}
u32 Fifo::getLoopIdx(u32 idx) {
if (idx >= mCount + 1) {
idx = 0;
}
return idx;
}
u32 Fifo::getCount() {
if (mLoopIdx < _C) {
return _C - mLoopIdx;
}
return _C + mCount + 1 - mLoopIdx;
}
void DrawSyncManager::end() {
if (!DrawSyncManager::sInstance) {
return;
}
delete DrawSyncManager::sInstance;
DrawSyncManager::sInstance = 0;
}
DrawSyncManager::~DrawSyncManager() {
GXSetDrawSyncCallback(0);
GXDisableBreakPt();
OSSendMessage(&mQueue, (void*)0x10000, OS_MESSAGE_BLOCK);
OSJoinThread(&mThread, 0);
}
/*
void DrawSyncManager::reset(bool arg) {
if (!arg && _372) {
_372 = 0;
_373 = 1;
GXSetDrawSyncCallback(DrawSyncManager::drawSyncCallback);
}
}
*/
// DrawSyncManager::drawSyncCallbackSub
void DrawSyncManager::pushBreakPoint() {
if (_36C & 0x3) {
GXFlush();
GXFifoObj fifoObj;
GXGetCPUFifo(&fifoObj);
void *readPtr, *writePtr;
GXGetFifoPtrs(&fifoObj, &readPtr, &writePtr);
OSSendMessage(&mQueue, writePtr, OS_MESSAGE_BLOCK);
}
}