From 58a008dfca1894735bb8ff963167865eaed8c69c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Sat, 9 Apr 2022 12:08:40 +0200 Subject: [PATCH] gsys: Add (placeholder) ModelUnit fields --- lib/NintendoSDK | 2 +- lib/agl | 2 +- lib/gsys/include/gsys/gsysModelNW.h | 41 ++++++++++++++++++- lib/gsys/include/gsys/gsysModelUnit.h | 57 +++++++++++++++++++++++++++ 4 files changed, 99 insertions(+), 3 deletions(-) diff --git a/lib/NintendoSDK b/lib/NintendoSDK index bfc57251..c0fd70dd 160000 --- a/lib/NintendoSDK +++ b/lib/NintendoSDK @@ -1 +1 @@ -Subproject commit bfc57251de9773694c8e59904cd65914f86047bf +Subproject commit c0fd70ddd661f1b5064cd2a0c7ebee4d60e5eb2b diff --git a/lib/agl b/lib/agl index 0f55dfba..62c3993c 160000 --- a/lib/agl +++ b/lib/agl @@ -1 +1 @@ -Subproject commit 0f55dfbaa9fcaf53e769cfc2cfc6e94187793e75 +Subproject commit 62c3993c8ef9cd25b74281ad73d6f5f385048b9e diff --git a/lib/gsys/include/gsys/gsysModelNW.h b/lib/gsys/include/gsys/gsysModelNW.h index 0230e414..0a7c67e8 100644 --- a/lib/gsys/include/gsys/gsysModelNW.h +++ b/lib/gsys/include/gsys/gsysModelNW.h @@ -1,6 +1,9 @@ #pragma once #include +#include +#include +#include namespace agl { class DrawContext; @@ -8,6 +11,10 @@ class DrawContext; namespace gsys { +class ModelAutoAnimation; +class ModelDynamicEnvInfo; +class ModelRenderUnitNW; + // XXX: bad name. This doesn't reflect the fact that ModelNW is a ModelUnit, not a Model. // TODO class ModelNW : public ModelUnit, @@ -15,15 +22,47 @@ class ModelNW : public ModelUnit, public sead::hostio::Node { SEAD_RTTI_OVERRIDE(ModelNW, ModelUnit) +public: + struct BoneCallbackArg; + + using BoneCallback = sead::IDelegate1; + using BoneCallbackStorage = sead::AnyDelegate1; + + const nn::g3d::SkeletonObj* getSkeletonObj() const { return mModelObj.GetSkeleton(); } + +protected: virtual void drawDetail(agl::DrawContext* context) const; virtual void createRenderUnitNW(int, sead::Heap* heap); -protected: virtual void calcBounding_(); // NOLINT(bugprone-virtual-near-miss) virtual void calcGPUSkinning_(); void Exec(nn::g3d::ICalculateWorldCallback::CallbackArg& arg, nn::g3d::WorldMtxManip& world_mtx_manip) override; + +private: + u8 _168; + nn::g3d::ModelObj mModelObj; + u8 _200; + u8 _201; + s8 mBufferNum; + u8 _203; + u8 _204; + u8 _205; + u8 _206; + u8 _207; + u32 _208; + ModelRenderUnitNW** mRenderUnits; + ModelAutoAnimation* mAutoAnimation; + ModelDynamicEnvInfo* mDynamicEnvInfo; + void* _228; + void* _230; + void* _238; + BoneCallbackStorage mBoneCallback; + void* _260; + int _268; + void* _270; + nn::gfx::MemoryPool mMemoryPool; }; } // namespace gsys diff --git a/lib/gsys/include/gsys/gsysModelUnit.h b/lib/gsys/include/gsys/gsysModelUnit.h index 085512ef..518333b8 100644 --- a/lib/gsys/include/gsys/gsysModelUnit.h +++ b/lib/gsys/include/gsys/gsysModelUnit.h @@ -7,8 +7,11 @@ #include #include #include +#include +#include #include #include +#include #include "gsys/gsysModelUnitDrawArray.h" namespace agl { @@ -25,8 +28,12 @@ enum class RenderViewOption; class ModelRenderUnit; class ModelScene; +class ModelUnitCallbackArg; class ModelViewData; +using ModelUnitCallback = sead::IDelegate1; +using ModelUnitCallbackStorage = sead::AnyDelegate1; + // TODO class ModelUnit { SEAD_RTTI_BASE(ModelUnit) @@ -34,6 +41,23 @@ public: // TODO: is this an enum/enum class or a class? enum class BoolType; + enum class Flag { + DebugWorldCallback = 4, + DebugDrawCallback = 8, + }; + + enum class Attribute { + OcclusionQuery = 1, + ViewFrustrumCulling = 2, + LodCalculation = 4, + ShapeCulling = 8, + BufferSwap = 0x10, + }; + + enum class ORFlag { + Force = 1, + }; + ModelUnit(); virtual ~ModelUnit(); @@ -161,6 +185,39 @@ public: virtual void calcBeforeDraw(ModelScene* scene, const gsys::ModelViewData* model_view_data, int); virtual void forceCalcDrawSetup(); virtual void setUpMaterialImpl(int, sead::Heap* heap); + +protected: + sead::TypedBitFlag mFlags; + s8 mUnkIndex; + s8 mNumLods; + sead::BitFlag16 mVisibilityMask; + u8 mDepthShadowCascade; + u16 mCalcWeight; + sead::TypedBitFlag mAttributeFlags; + u16 _14; + u16 _16; + void* _18; + void* _20; + ModelUnitDrawArray* mDrawArray; + void* _30; + void* _38; + sead::Vector3f _40; + u32 _4c; + sead::Vector3f* _50; + void* _58; + void* _60; + void* mMaterialInfo; + void* _70; + void* _78; + void* _80; + void* _88; + void* _90; + ModelUnitCallbackStorage mCallback; + sead::SafeString mName; + +#ifdef SEAD_DEBUG + sead::TypedBitFlag mORFlags; +#endif }; } // namespace gsys