From 57ae6c7073b402255883ca8dc69a4beea9eb3694 Mon Sep 17 00:00:00 2001 From: GRAnimated Date: Mon, 24 Mar 2025 22:11:40 -0400 Subject: [PATCH 1/2] WIP --- lib/g3d/include/nn/g3d/g3d_MaterialObj.h | 30 ++++++++++++++++++++++++ lib/g3d/include/nn/g3d/g3d_ModelObj.h | 22 +++++++++++++++-- 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 lib/g3d/include/nn/g3d/g3d_MaterialObj.h diff --git a/lib/g3d/include/nn/g3d/g3d_MaterialObj.h b/lib/g3d/include/nn/g3d/g3d_MaterialObj.h new file mode 100644 index 00000000..44aabfbc --- /dev/null +++ b/lib/g3d/include/nn/g3d/g3d_MaterialObj.h @@ -0,0 +1,30 @@ +#pragma once + +#include "nn/gfx/gfx_Device.h" + +namespace nn::g3d { +class MaterialObj { +public: + struct InitializeArgument { + s32 CalculateMemorySize(); + }; + + void Initialize(const InitializeArgument&, void*, u64); + void InitializeDependPointer(); + void GetBlockBufferAlignment(gfx::TDevice*) const; + void CalculateBlockBufferSize(gfx::TDevice*) const; + void SetupBlockBufferImpl(gfx::TDevice*, + gfx::TMemoryPool*, s64, u64); + void ResetDirtyFlags(); + void SetupBlockBuffer(gfx::TDevice*, + gfx::TMemoryPool*, s64, u64); + void CleanupBlockBuffer(gfx::TDevice*); + void CalculateMaterial(s32); + + template + void ConvertDirtyParams(void*, u32*); + +private: + void* filler[16]; +}; +} // namespace nn::g3d diff --git a/lib/g3d/include/nn/g3d/g3d_ModelObj.h b/lib/g3d/include/nn/g3d/g3d_ModelObj.h index e7b0b8cf..61a30b88 100644 --- a/lib/g3d/include/nn/g3d/g3d_ModelObj.h +++ b/lib/g3d/include/nn/g3d/g3d_ModelObj.h @@ -3,6 +3,8 @@ #include #include +#include + namespace nn::g3d { class MaterialObj; @@ -10,15 +12,31 @@ class ResModel; class ShapeObj; class SkeletonObj; +struct Bounds { + f32 x; + f32 y; + f32 z; + f32 unk; + f32 radius; +}; + // TODO class ModelObj { public: + MaterialObj* FindMaterial(const char* materialName); + SkeletonObj* GetSkeleton() const { return m_Skeleton; } int32_t GetNumShapes() const { return m_NumShapes; } int32_t get_8c() const { return _8c; } + u8 GetViewDependentModelFlags() const { return m_ViewDependentModelFlags; } + + MaterialObj* GetMaterial(s32 index) const { return &m_Materials[index]; } + + const Bounds& GetBounds() const { return *m_Bounds; } + private: struct InitializeArgument; @@ -28,7 +46,7 @@ class ModelObj { void* _8; void* _10; uint8_t _18; - uint8_t _19; + uint8_t m_ViewDependentModelFlags; uint16_t _1a; void* _20; void* _28; @@ -37,7 +55,7 @@ class ModelObj { SkeletonObj* m_Skeleton; ShapeObj* m_Shapes; MaterialObj* m_Materials; - void* _50; + Bounds* m_Bounds; void* m_UserData; void* _60; void* _68; From 23f154db4d09fae11cd033fbe3f71b481944ffe9 Mon Sep 17 00:00:00 2001 From: Pistonight Date: Tue, 29 Sep 2026 10:13:04 -0700 Subject: [PATCH 2/2] apply migration --- lib/g3d/include/nn/g3d/g3d_MaterialObj.h | 20 ++++++++++---------- lib/g3d/include/nn/g3d/g3d_ModelObj.h | 21 +++++++-------------- lib/g3d/include/nn/g3d/g3d_ViewVolume.h | 8 +++++++- 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/lib/g3d/include/nn/g3d/g3d_MaterialObj.h b/lib/g3d/include/nn/g3d/g3d_MaterialObj.h index 44aabfbc..a12e8e6a 100644 --- a/lib/g3d/include/nn/g3d/g3d_MaterialObj.h +++ b/lib/g3d/include/nn/g3d/g3d_MaterialObj.h @@ -1,28 +1,28 @@ #pragma once -#include "nn/gfx/gfx_Device.h" +#include namespace nn::g3d { class MaterialObj { public: struct InitializeArgument { - s32 CalculateMemorySize(); + void CalculateMemorySize(); }; - void Initialize(const InitializeArgument&, void*, u64); + bool Initialize(const InitializeArgument&, void*, uint64_t); void InitializeDependPointer(); - void GetBlockBufferAlignment(gfx::TDevice*) const; - void CalculateBlockBufferSize(gfx::TDevice*) const; + int64_t GetBlockBufferAlignment(gfx::TDevice*) const; + int32_t CalculateBlockBufferSize(gfx::TDevice*) const; void SetupBlockBufferImpl(gfx::TDevice*, - gfx::TMemoryPool*, s64, u64); + gfx::TMemoryPool*, int64_t, uint64_t); void ResetDirtyFlags(); - void SetupBlockBuffer(gfx::TDevice*, - gfx::TMemoryPool*, s64, u64); + bool SetupBlockBuffer(gfx::TDevice*, + gfx::TMemoryPool*, int64_t, uint64_t); void CleanupBlockBuffer(gfx::TDevice*); - void CalculateMaterial(s32); + void CalculateMaterial(int32_t); template - void ConvertDirtyParams(void*, u32*); + void ConvertDirtyParams(void*, uint32_t*); private: void* filler[16]; diff --git a/lib/g3d/include/nn/g3d/g3d_ModelObj.h b/lib/g3d/include/nn/g3d/g3d_ModelObj.h index 61a30b88..acab74e5 100644 --- a/lib/g3d/include/nn/g3d/g3d_ModelObj.h +++ b/lib/g3d/include/nn/g3d/g3d_ModelObj.h @@ -3,7 +3,8 @@ #include #include -#include +#include +#include namespace nn::g3d { @@ -12,14 +13,6 @@ class ResModel; class ShapeObj; class SkeletonObj; -struct Bounds { - f32 x; - f32 y; - f32 z; - f32 unk; - f32 radius; -}; - // TODO class ModelObj { public: @@ -31,11 +24,11 @@ class ModelObj { int32_t get_8c() const { return _8c; } - u8 GetViewDependentModelFlags() const { return m_ViewDependentModelFlags; } + uint8_t GetViewDependentModelFlags() const { return m_ViewDependentModelFlags; } - MaterialObj* GetMaterial(s32 index) const { return &m_Materials[index]; } + MaterialObj* GetMaterial(int32_t index) const { return &m_Materials[index]; } - const Bounds& GetBounds() const { return *m_Bounds; } + const Sphere& GetBounds() const { return *m_Bounds; } private: struct InitializeArgument; @@ -46,7 +39,7 @@ class ModelObj { void* _8; void* _10; uint8_t _18; - uint8_t m_ViewDependentModelFlags; + uint8_t m_ViewDependentModelFlags; // TODO: is this right? uint16_t _1a; void* _20; void* _28; @@ -55,7 +48,7 @@ class ModelObj { SkeletonObj* m_Skeleton; ShapeObj* m_Shapes; MaterialObj* m_Materials; - Bounds* m_Bounds; + Sphere* m_Bounds; void* m_UserData; void* _60; void* _68; diff --git a/lib/g3d/include/nn/g3d/g3d_ViewVolume.h b/lib/g3d/include/nn/g3d/g3d_ViewVolume.h index cca55158..fd179688 100644 --- a/lib/g3d/include/nn/g3d/g3d_ViewVolume.h +++ b/lib/g3d/include/nn/g3d/g3d_ViewVolume.h @@ -6,7 +6,13 @@ namespace nn::g3d { class Aabb; -class Sphere; + +struct Sphere { + float x; + float y; + float z; + float radius; +}; class ViewVolume { public: