summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2022-04-07 01:37:43 +0200
committerLéo Lam <leo@leolam.fr>2022-04-07 01:40:54 +0200
commitc7a0797fe4e268e7e8a22779ff10ef2d4204779b (patch)
tree1a7b9fa92f921de5092f8975c0a4e5198c3dd456
parent55f8bde652075d7735e0b01e4d23e7e94859868b (diff)
gsys: Add ModelUnit virtual functions
-rw-r--r--lib/gsys/CMakeLists.txt1
-rw-r--r--lib/gsys/include/gsys/gsysModelNW.h14
-rw-r--r--lib/gsys/include/gsys/gsysModelUnit.h149
-rw-r--r--lib/gsys/include/gsys/gsysModelUnitDrawArray.h18
4 files changed, 182 insertions, 0 deletions
diff --git a/lib/gsys/CMakeLists.txt b/lib/gsys/CMakeLists.txt
index f51725f1..bec73906 100644
--- a/lib/gsys/CMakeLists.txt
+++ b/lib/gsys/CMakeLists.txt
@@ -9,6 +9,7 @@ add_library(gsys OBJECT
include/gsys/gsysModelNW.h
include/gsys/gsysModelSceneConfig.h
include/gsys/gsysModelUnit.h
+ include/gsys/gsysModelUnitDrawArray.h
include/gsys/gsysOfxLensFlareRig.h
include/gsys/gsysORUtil.h
include/gsys/gsysParticleConfig.h
diff --git a/lib/gsys/include/gsys/gsysModelNW.h b/lib/gsys/include/gsys/gsysModelNW.h
index 5f0afbb7..0230e414 100644
--- a/lib/gsys/include/gsys/gsysModelNW.h
+++ b/lib/gsys/include/gsys/gsysModelNW.h
@@ -2,6 +2,10 @@
#include <gsys/gsysModelUnit.h>
+namespace agl {
+class DrawContext;
+}
+
namespace gsys {
// XXX: bad name. This doesn't reflect the fact that ModelNW is a ModelUnit, not a Model.
@@ -10,6 +14,16 @@ class ModelNW : public ModelUnit,
public nn::g3d::ICalculateWorldCallback,
public sead::hostio::Node {
SEAD_RTTI_OVERRIDE(ModelNW, ModelUnit)
+
+ 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;
};
} // namespace gsys
diff --git a/lib/gsys/include/gsys/gsysModelUnit.h b/lib/gsys/include/gsys/gsysModelUnit.h
index b38210cf..085512ef 100644
--- a/lib/gsys/include/gsys/gsysModelUnit.h
+++ b/lib/gsys/include/gsys/gsysModelUnit.h
@@ -1,17 +1,166 @@
#pragma once
+#include <basis/seadTypes.h>
+#include <gfx/seadColor.h>
#include <hostio/seadHostIONode.h>
+#include <math/seadBoundBox.h>
+#include <math/seadMatrix.h>
+#include <math/seadVector.h>
#include <nn/g3d/World.h>
#include <prim/seadRuntimeTypeInfo.h>
+#include <prim/seadSafeString.h>
+#include "gsys/gsysModelUnitDrawArray.h"
+
+namespace agl {
+class UniformBlock;
+}
namespace gsys {
+namespace ModelEnum {
+enum class ShaderAssignType;
+enum class RenderOption;
+enum class RenderViewOption;
+} // namespace ModelEnum
+
+class ModelRenderUnit;
+class ModelScene;
+class ModelViewData;
+
// TODO
class ModelUnit {
SEAD_RTTI_BASE(ModelUnit)
public:
+ // TODO: is this an enum/enum class or a class?
+ enum class BoolType;
+
ModelUnit();
virtual ~ModelUnit();
+
+ // FIXME
+ virtual void createDrawArray(const ModelUnitDrawArray::CreateArg& arg, sead::Heap* heap);
+
+ virtual sead::SafeString getName() const;
+
+ virtual int getBoneNum() const;
+ virtual int searchBoneIndex(const sead::SafeString& bone_name) const;
+ virtual sead::SafeString getBoneName(int bone_idx) const;
+ virtual void setBoneLocalMatrix(const sead::Matrix34f& matrix, const sead::Vector3f& pos,
+ int bone_idx);
+ virtual void setBoneLocalRTMatrix(const sead::Matrix34f& matrix, int bone_idx);
+ virtual void setBoneLocalScale(const sead::Vector3f& scale, int bone_idx);
+ virtual void getBoneLocalMatrix(sead::Matrix34f* matrix, sead::Vector3f* pos,
+ int bone_idx) const;
+ virtual void setBoneWorldMatrix(const sead::Matrix34f& matrix, int bone_idx);
+ virtual void getBoneWorldMatrix(sead::Matrix34f* matrix, int bone_idx) const;
+ virtual sead::Matrix34f* getBoneWorldMatrixPtr(int bone_idx) const;
+ virtual void safeGetBoneWorldMatrix(sead::Matrix34f* matrix, int bone_idx) const;
+ virtual void setBoneVisible(int bone_idx, bool visible);
+ virtual bool isBoneVisible(int bone_idx) const;
+ virtual int getBoneParentIndex(int bone_idx) const;
+ virtual void copyBoneLocalMatrixTo(gsys::ModelUnit* target) const;
+ virtual void copyBoneWorldMatrixTo(gsys::ModelUnit* target) const;
+ virtual void clearBoneLocalMatrix();
+
+ virtual int getMaterialNum() const = 0;
+ virtual int searchMaterialIndex(const sead::SafeString& material_name) const;
+ virtual sead::SafeString getMaterialName(int material_idx) const;
+
+ virtual int searchMaterialParamIndex(int material_idx,
+ const sead::SafeString& param_name) const;
+ virtual sead::SafeString getMaterialParamName(int material_idx, int param_idx) const;
+
+ virtual bool getMaterialParamBool(int material_idx, int param_idx) const;
+ virtual void setMaterialParamBool(int material_idx, int param_idx, bool value);
+
+ virtual int getMaterialParamInt(int material_idx, int param_idx) const;
+ virtual void setMaterialParamInt(int material_idx, int param_idx, int value);
+
+ virtual u32 getMaterialParamU32(int material_idx, int param_idx) const;
+ virtual void setMaterialParamU32(int material_idx, int param_idx, u32 value);
+
+ virtual float getMaterialParamF32(int material_idx, int param_idx) const;
+ virtual void setMaterialParamF32(int material_idx, int param_idx, float value);
+
+ virtual const sead::Vector2f& getMaterialParamVector2f(int material_idx, int param_idx) const;
+ virtual void setMaterialParamVector2f(int material_idx, int param_idx,
+ const sead::Vector2f& value);
+
+ virtual const sead::Vector3f& getMaterialParamVector3f(int material_idx, int param_idx) const;
+ virtual void setMaterialParamVector3f(int material_idx, int param_idx,
+ const sead::Vector3f& value);
+
+ virtual const sead::Vector4f& getMaterialParamVector4f(int material_idx, int param_idx) const;
+ virtual void setMaterialParamVector4f(int material_idx, int param_idx,
+ const sead::Vector4f& value);
+
+ virtual const sead::Color4f& getMaterialParamColor4f(int material_idx, int param_idx) const;
+ virtual void setMaterialParamColor4f(int material_idx, int param_idx,
+ const sead::Color4f& value);
+
+ virtual const sead::Color4f& getMaterialParamColor3f(int material_idx, int param_idx) const;
+ virtual void setMaterialParamColor3f(int material_idx, int param_idx,
+ const sead::Color4f& value);
+
+ virtual void getMaterialParamTexSRT(int material_idx, int param_idx, sead::Vector2f* scale,
+ float* rotate, sead::Vector2f* translate) const;
+ virtual void setMaterialParamTexSRT(int material_idx, int param_idx,
+ const sead::Vector2f& scale, float rotate,
+ const sead::Vector2f& translate);
+
+ virtual sead::Matrix34f* getMaterialParamEffectMatrixPtr(int material_idx, int param_idx) const;
+ virtual void setMaterialParamEffectMatrixPtr(int material_idx, int param_idx,
+ sead::Matrix34f* matrix);
+
+ virtual float getMaterialParamXluAlpha(int material_idx, int param_idx) const;
+ virtual void setMaterialParamXluAlpha(int material_idx, int param_idx, float xlu_alpha);
+
+ virtual void clearMaterialParameter(int material_idx);
+ virtual void clearTexture(int unk);
+
+ virtual void setMaterialVisible(int material_idx, bool visible);
+ virtual bool isMaterialVisible(int material_idx) const;
+
+ virtual void setMaterialShaderAssignVariation(int material_idx,
+ ModelEnum::ShaderAssignType assign_type, int);
+
+ virtual int getShapeNum() const = 0;
+
+ // TODO: reference or pointer?
+ virtual ModelRenderUnit* getModelRenderUnit(int idx) = 0;
+ virtual const ModelRenderUnit* getModelRenderUnit(int idx) const = 0;
+
+ virtual void* createSubMeshRangeBuffer(sead::Heap* heap) const;
+ virtual void setSubMeshRangeBuffer(int, void*);
+ virtual void setSubMeshRangeBufferVisible(int, int, const bool*);
+
+ virtual int countPolygonNum() const;
+
+ virtual int getViewNum() const;
+ virtual void calcBoundAABB(sead::BoundBox3f* aabb, bool) const;
+
+ virtual bool isDefaultRenderOptionEnabled(int, ModelEnum::RenderOption) const;
+ virtual bool isDefaultRenderViewOptionEnabled(int, ModelEnum::RenderViewOption, int) const;
+
+ virtual void setUserUniformBlock(int, agl::UniformBlock* block);
+
+ virtual void enableReverseCulling(int, bool enable);
+ virtual bool isReverseCullingEnabled(int) const;
+
+ virtual void setLodLevelNum(int lod_level_num);
+
+ virtual void check(BoolType) const;
+ virtual void calcBounding();
+ virtual void bind(const ModelScene* scene);
+ virtual void bindResource();
+ virtual void syncResource();
+ virtual void unbindResource();
+ virtual void calcWorld(const sead::Matrix34f&, const sead::Vector3f&);
+ virtual void postCalcWorld(const ModelScene* scene, u32, u32,
+ const ModelViewData* model_view_data, int);
+ virtual void calcBeforeDraw(ModelScene* scene, const gsys::ModelViewData* model_view_data, int);
+ virtual void forceCalcDrawSetup();
+ virtual void setUpMaterialImpl(int, sead::Heap* heap);
};
} // namespace gsys
diff --git a/lib/gsys/include/gsys/gsysModelUnitDrawArray.h b/lib/gsys/include/gsys/gsysModelUnitDrawArray.h
new file mode 100644
index 00000000..1d932a20
--- /dev/null
+++ b/lib/gsys/include/gsys/gsysModelUnitDrawArray.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include <hostio/seadHostIONode.h>
+
+namespace gsys {
+
+// TODO
+class ModelUnitDrawArray : public sead::hostio::Node {
+public:
+ struct CreateArg {
+ CreateArg();
+ };
+
+ ModelUnitDrawArray();
+ virtual ~ModelUnitDrawArray();
+};
+
+} // namespace gsys