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..a12e8e6a --- /dev/null +++ b/lib/g3d/include/nn/g3d/g3d_MaterialObj.h @@ -0,0 +1,30 @@ +#pragma once + +#include + +namespace nn::g3d { +class MaterialObj { +public: + struct InitializeArgument { + void CalculateMemorySize(); + }; + + bool Initialize(const InitializeArgument&, void*, uint64_t); + void InitializeDependPointer(); + int64_t GetBlockBufferAlignment(gfx::TDevice*) const; + int32_t CalculateBlockBufferSize(gfx::TDevice*) const; + void SetupBlockBufferImpl(gfx::TDevice*, + gfx::TMemoryPool*, int64_t, uint64_t); + void ResetDirtyFlags(); + bool SetupBlockBuffer(gfx::TDevice*, + gfx::TMemoryPool*, int64_t, uint64_t); + void CleanupBlockBuffer(gfx::TDevice*); + void CalculateMaterial(int32_t); + + template + void ConvertDirtyParams(void*, uint32_t*); + +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..acab74e5 100644 --- a/lib/g3d/include/nn/g3d/g3d_ModelObj.h +++ b/lib/g3d/include/nn/g3d/g3d_ModelObj.h @@ -3,6 +3,9 @@ #include #include +#include +#include + namespace nn::g3d { class MaterialObj; @@ -13,12 +16,20 @@ class SkeletonObj; // 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; } + uint8_t GetViewDependentModelFlags() const { return m_ViewDependentModelFlags; } + + MaterialObj* GetMaterial(int32_t index) const { return &m_Materials[index]; } + + const Sphere& GetBounds() const { return *m_Bounds; } + private: struct InitializeArgument; @@ -28,7 +39,7 @@ class ModelObj { void* _8; void* _10; uint8_t _18; - uint8_t _19; + uint8_t m_ViewDependentModelFlags; // TODO: is this right? uint16_t _1a; void* _20; void* _28; @@ -37,7 +48,7 @@ class ModelObj { SkeletonObj* m_Skeleton; ShapeObj* m_Shapes; MaterialObj* m_Materials; - void* _50; + 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: