SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
DrawSyncManager.cpp
1#include "Game/System/DrawSyncManager.hpp"
2
3DrawSyncManager* DrawSyncManager::start(u32 a1, s32 a2) {
4 if (!DrawSyncManager::sInstance) {
5 DrawSyncManager::sInstance = new DrawSyncManager(a1, a2);
6 }
7
8 return DrawSyncManager::sInstance;
9}
10
11void DrawSyncManager::prepareReset() {
12 if (!DrawSyncManager::sInstance) {
13 return;
14 }
15
16 DrawSyncManager::sInstance->reset(true);
17}
18
19void DrawSyncManager::resetIfAborted() {
20 if (!DrawSyncManager::sInstance) {
21 return;
22 }
23
24 DrawSyncManager::sInstance->reset(false);
25}
26
27void DrawSyncManager::clearFifo() {
28 while (mFifo->getCount() != 0) {
29 mFifo->pop();
30 }
31}
32
33Fifo* Fifo::pop() {
34 Fifo* cur = mArray[mLoopIdx];
35 mLoopIdx = getLoopIdx(mLoopIdx + 1);
36 return cur;
37}
38
39u32 Fifo::getLoopIdx(u32 idx) {
40 if (idx >= mCount + 1) {
41 idx = 0;
42 }
43
44 return idx;
45}
46
47u32 Fifo::getCount() {
48 if (mLoopIdx < _C) {
49 return _C - mLoopIdx;
50
51 }
52
53 return _C + mCount + 1 - mLoopIdx;
54}
55
56void DrawSyncManager::end() {
57 if (!DrawSyncManager::sInstance) {
58 return;
59 }
60
61 delete DrawSyncManager::sInstance;
62 DrawSyncManager::sInstance = 0;
63}
64
65DrawSyncManager::~DrawSyncManager() {
66 GXSetDrawSyncCallback(0);
67 GXDisableBreakPt();
68 OSSendMessage(&mQueue, (void*)0x10000, OS_MESSAGE_BLOCK);
69 OSJoinThread(&mThread, 0);
70}
71
72/*
73void DrawSyncManager::reset(bool arg) {
74 if (!arg && _372) {
75 _372 = 0;
76 _373 = 1;
77
78 GXSetDrawSyncCallback(DrawSyncManager::drawSyncCallback);
79 }
80}
81*/
82
83// DrawSyncManager::drawSyncCallbackSub
84
85void DrawSyncManager::pushBreakPoint() {
86 if (_36C & 0x3) {
87 GXFlush();
88 GXFifoObj fifoObj;
89 GXGetCPUFifo(&fifoObj);
90
91 void *readPtr, *writePtr;
92
93 GXGetFifoPtrs(&fifoObj, &readPtr, &writePtr);
94 OSSendMessage(&mQueue, writePtr, OS_MESSAGE_BLOCK);
95 }
96}