From 4ae5fe5753537264872e09562acb2e853dd41850 Mon Sep 17 00:00:00 2001 From: Elijah Thomas Date: Fri, 6 Oct 2023 07:49:50 -0400 Subject: Fix includes and removed libs folder --- src/egg/core/eggDisplay.cpp | 102 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/egg/core/eggDisplay.cpp (limited to 'src/egg/core/eggDisplay.cpp') diff --git a/src/egg/core/eggDisplay.cpp b/src/egg/core/eggDisplay.cpp new file mode 100644 index 00000000..16031605 --- /dev/null +++ b/src/egg/core/eggDisplay.cpp @@ -0,0 +1,102 @@ +#include "egg/core/eggDisplay.h" +#include "nw4r/db/db_directPrint.h" +#include "egg/core/eggXfbManager.h" +#include "rvl/GX.h" +#include "rvl/OS/OSHardware.h" + +extern "C" { + void PreRetraceCallback(u32 retraceCount) { + EGG::BaseSystem::getDisplay()->preVRetrace(); + } +} +namespace EGG { + +u32 Display::sTickPeriod = ((OS_BUS_CLOCK_SPEED >> 2)/125000)*300 >> 3; + +/* 80497570 */ +Display::Display(u8 maxRetrace) : + mMaxRetraces(maxRetrace), + mScreenStateFlag(), + mRetraceCount(0), + mFrameCount(0), + mClearColor(0x808080ff), + mClearZ(0xFFFFFF), + mBeginTick(0), + mFlag() +{ + mFlag.setBit(mFlag_SetClear); + mFlag.setBit(mFlag_WaitForRetrace); + nw4r::db::DirectPrint_Init(); + VISetPreRetraceCallback(PreRetraceCallback); +} + +/* vt 0x18 | 804975f0 */ +u32 Display::getTickPerFrame() { + return Video::getTickPerVRetrace(); +} +/* vt 0x08 | 80497600 */ +void Display::beginFrame() { + + GXDrawDone(); + if ( + mFlag.onBit(mFlag_WaitForRetrace) + || (BaseSystem::getXfbMgr()->mNumXfbs == 1 + && OSGetTick()-mLastTick > sTickPeriod)) { + VIWaitForRetrace(); + } + // Holds while the next XFB gets to its copy state + while (BaseSystem::getXfbMgr()->mToCopyXfb == 0 ) { + VIWaitForRetrace(); + } + copyEFBtoXFB(); + calcFrequency(); + mFrameCount++; +} + +/* vt 0x0C | 804976c0 */ +void Display::beginRender() { + return; +} + +/* vt 0x10 | 804976d0 */ +void Display::endRender() { + return; +} + +/* vt 0x14 | 804976e0 */ +void Display::endFrame() { + return; +} + + +/* vt 0x1C | 804976f0 */ +void Display::preVRetrace() { + mLastTick = OSGetTick(); + if (VIGetRetraceCount() - mRetraceCount < mMaxRetraces) return; + if (mScreenStateFlag.onBit(mScreenStateFlag_SetBlack)) { + BaseSystem::getVideo()->setBlack(1); + mScreenStateFlag.resetBit(mScreenStateFlag_SetBlack); + } + BaseSystem::getXfbMgr()->setNextFrameBuffer(); + mRetraceCount = VIGetRetraceCount(); +} + +/* 804977d0 */ +void Display::copyEFBtoXFB() { + if (mFlag.onBit(mFlag_SetClear)) { + GXSetCopyClear(mClearColor, mClearZ); + } + GXRenderModeObj const* renderObj = BaseSystem::getVideo()->pRenderMode; + GXSetCopyFilter(renderObj->aa, renderObj->sample_pattern, renderObj->aa == 0, renderObj->vfilter); + BaseSystem::getXfbMgr()->copyEFB(mFlag.onBit(mFlag_SetClear)); +} + +/* 80497870 */ +void Display::calcFrequency() { + s32 endTick = OSGetTick(); + mDeltaTick = endTick-mBeginTick; + mFrequency = 1000000.0f / ((mDeltaTick * 8) / ((OS_BUS_CLOCK_SPEED >> 2) / 125000)); + mBeginTick = endTick; +} + +} // namespace EGG \ No newline at end of file -- cgit v1.2.3