1#include "Game/System/DrawSyncManager.hpp"
4 if (!DrawSyncManager::sInstance) {
8 return DrawSyncManager::sInstance;
11void DrawSyncManager::prepareReset() {
12 if (!DrawSyncManager::sInstance) {
16 DrawSyncManager::sInstance->reset(
true);
19void DrawSyncManager::resetIfAborted() {
20 if (!DrawSyncManager::sInstance) {
24 DrawSyncManager::sInstance->reset(
false);
27void DrawSyncManager::clearFifo() {
28 while (mFifo->getCount() != 0) {
34 Fifo* cur = mArray[mLoopIdx];
35 mLoopIdx = getLoopIdx(mLoopIdx + 1);
39u32 Fifo::getLoopIdx(u32 idx) {
40 if (idx >= mCount + 1) {
53 return _C + mCount + 1 - mLoopIdx;
56void DrawSyncManager::end() {
57 if (!DrawSyncManager::sInstance) {
61 delete DrawSyncManager::sInstance;
62 DrawSyncManager::sInstance = 0;
65DrawSyncManager::~DrawSyncManager() {
66 GXSetDrawSyncCallback(0);
68 OSSendMessage(&mQueue, (
void*)0x10000, OS_MESSAGE_BLOCK);
69 OSJoinThread(&mThread, 0);
85void DrawSyncManager::pushBreakPoint() {
89 GXGetCPUFifo(&fifoObj);
91 void *readPtr, *writePtr;
93 GXGetFifoPtrs(&fifoObj, &readPtr, &writePtr);
94 OSSendMessage(&mQueue, writePtr, OS_MESSAGE_BLOCK);