1#pragma once
2
3#include <basis/seadTypes.h>
4#include <framework/nx/seadGameFrameworkNx.h>
5
6#include "Library/HostIO/HioNode.h"
7
8namespace agl {
9class DisplayList;
10class DrawContext;
11class RenderBuffer;
12class RenderTargetColor;
13} // namespace agl
14
15namespace sead {
16class Event;
17}
18
19namespace al {
20
21class GpuPerf;
22
23class GameFrameworkNx : public sead::GameFrameworkNx, public HioNode {
24 SEAD_RTTI_OVERRIDE(GameFrameworkNx, sead::GameFrameworkNx);
25
26public:
27 GameFrameworkNx();
28 ~GameFrameworkNx() override;
29 void createControllerMgr(sead::TaskBase* base) override;
30 void createHostIOMgr(sead::TaskBase* base, sead::HostIOMgr::Parameter* hostioParam,
31 sead::Heap* heap) override;
32 void createInfLoopChecker(sead::TaskBase* base, const sead::TickSpan&, s32) override;
33
34 void clearFrameBuffer();
35 void initAgl(sead::Heap* heap, s32 virtWidth, s32 virtHeight, s32 dockedWidth, s32 dockedHeight,
36 s32 handheldWidth, s32 handheldHeight);
37
38 void enableClearRenderBuffer() { mIsClearRenderBuffer = true; }
39
40 void disableClearRenderBuffer() { mIsClearRenderBuffer = false; }
41
42private:
43 void procFrame_() override;
44 void procDraw_() override;
45 void present_() override;
46
47 agl::DrawContext* mDrawContext;
48 agl::RenderBuffer* mDockedRenderBuffer;
49 agl::RenderTargetColor* mDockedClearColor;
50 agl::RenderBuffer* mHandheldRenderBuffer;
51 agl::RenderTargetColor* mHandheldClearColor;
52 agl::DisplayList* mDisplayList[2];
53 GpuPerf* mGpuPerf;
54 s32 mCurDisplayListIdx;
55 void* mDisplayControlMemory[2];
56 bool mIsClearRenderBuffer;
57 bool mIsDocked;
58 sead::Event* mDrawReadyEvent;
59};
60
61static_assert(sizeof(GameFrameworkNx) == 0x278);
62
63} // namespace al
64