// // Generated By: dol2asm // Translation Unit: JUTXfb // #include "JSystem/JUtility/JUTXfb.h" #include "dol2asm.h" #include "dolphin/gx/GX.h" #include "dolphin/types.h" // // Forward References: // extern "C" void clearIndex__6JUTXfbFv(); extern "C" void common_init__6JUTXfbFi(); extern "C" void __ct__6JUTXfbFPC16_GXRenderModeObjP7JKRHeapQ26JUTXfb10EXfbNumber(); extern "C" void __dt__6JUTXfbFv(); extern "C" void delXfb__6JUTXfbFi(); extern "C" void createManager__6JUTXfbFP7JKRHeapQ26JUTXfb10EXfbNumber(); extern "C" void destroyManager__6JUTXfbFv(); extern "C" void initiate__6JUTXfbFUsUsP7JKRHeapQ26JUTXfb10EXfbNumber(); extern "C" u8 sManager__6JUTXfb[4 + 4 /* padding */]; // // External References: // extern "C" void* __nw__FUl(); extern "C" void* __nwa__FUlP7JKRHeapi(); extern "C" void __dl__FPv(); extern "C" void _savegpr_27(); extern "C" void _savegpr_28(); extern "C" void _savegpr_29(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); extern "C" u8 sSystemHeap__7JKRHeap[4]; extern "C" u8 sManager__8JUTVideo[4]; // // Declarations: // void JUTXfb::clearIndex() { mDrawingXfbIndex = -1; mDrawnXfbIndex = -1; mDisplayingXfbIndex = -1; } void JUTXfb::common_init(int bufNum) { mBufferNum = bufNum; clearIndex(); mSDrawingFlag = 99; } /* 802E5260-802E5308 2DFBA0 00A8+00 1/1 0/0 0/0 .text * __ct__6JUTXfbFPC16_GXRenderModeObjP7JKRHeapQ26JUTXfb10EXfbNumber */ #ifdef NONMATCHING JUTXfb::JUTXfb(_GXRenderModeObj const* pObj, JKRHeap* pHeap, JUTXfb::EXfbNumber xfbNum) { common_init(xfbNum); if (pObj) { initiate(pObj->fb_width, pObj->xfb_height, pHeap, xfbNum); } else { //_GXRenderModeObj* renderObj = JUTVideo::getManager()->getRenderMode(); u16 fb_width = JUTVideo::getManager()->getRenderMode()->fb_width; u16 efb_height = JUTVideo::getManager()->getRenderMode()->efb_height; u16 xfb_height = JUTVideo::getManager()->getRenderMode()->xfb_height; f32 scale_factor = GXGetYScaleFactor(efb_height, xfb_height); initiate(fb_width, GXGetNumXfbLines(efb_height, scale_factor), pHeap, xfbNum); } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm JUTXfb::JUTXfb(_GXRenderModeObj const* param_0, JKRHeap* param_1, JUTXfb::EXfbNumber param_2) { nofralloc #include "asm/JSystem/JUtility/JUTXfb/__ct__6JUTXfbFPC16_GXRenderModeObjP7JKRHeapQ26JUTXfb10EXfbNumber.s" } #pragma pop #endif JUTXfb* JUTXfb::sManager; JUTXfb::~JUTXfb() { for (int i = 0; i < 3; i++) { delXfb(i); } sManager = NULL; } void JUTXfb::delXfb(int xfbIdx) { if (mXfbAllocated[xfbIdx] && mBuffer[xfbIdx]) { delete mBuffer[xfbIdx]; } } JUTXfb* JUTXfb::createManager(JKRHeap* pHeap, JUTXfb::EXfbNumber xfbNum) { if (sManager == NULL) { sManager = new JUTXfb(NULL, pHeap, xfbNum); } return sManager; } void JUTXfb::destroyManager() { delete sManager; sManager = NULL; } void JUTXfb::initiate(u16 width, u16 height, JKRHeap* pHeap, JUTXfb::EXfbNumber xfbNum) { if (pHeap == NULL) { pHeap = JKRHeap::getSystemHeap(); } int size = ((u32)width + 0xf & 0xfff0) * (u32)height * 2; void* buf = ::operator new[](size, pHeap, 0x20); mBuffer[0] = buf; mXfbAllocated[0] = true; if (xfbNum >= 2) { buf = ::operator new[](size, pHeap, 0x20); mBuffer[1] = buf; mXfbAllocated[1] = true; } else { mBuffer[1] = NULL; mXfbAllocated[1] = false; } if (xfbNum >= 3) { buf = ::operator new[](size, pHeap, 0x20); mBuffer[2] = buf; mXfbAllocated[2] = true; } else { mBuffer[2] = NULL; mXfbAllocated[2] = false; } }