mirror of https://github.com/zeldaret/botw.git
gsys: Add ModelUnit virtual functions
This commit is contained in:
parent
55f8bde652
commit
c7a0797fe4
|
@ -9,6 +9,7 @@ add_library(gsys OBJECT
|
||||||
include/gsys/gsysModelNW.h
|
include/gsys/gsysModelNW.h
|
||||||
include/gsys/gsysModelSceneConfig.h
|
include/gsys/gsysModelSceneConfig.h
|
||||||
include/gsys/gsysModelUnit.h
|
include/gsys/gsysModelUnit.h
|
||||||
|
include/gsys/gsysModelUnitDrawArray.h
|
||||||
include/gsys/gsysOfxLensFlareRig.h
|
include/gsys/gsysOfxLensFlareRig.h
|
||||||
include/gsys/gsysORUtil.h
|
include/gsys/gsysORUtil.h
|
||||||
include/gsys/gsysParticleConfig.h
|
include/gsys/gsysParticleConfig.h
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
|
|
||||||
#include <gsys/gsysModelUnit.h>
|
#include <gsys/gsysModelUnit.h>
|
||||||
|
|
||||||
|
namespace agl {
|
||||||
|
class DrawContext;
|
||||||
|
}
|
||||||
|
|
||||||
namespace gsys {
|
namespace gsys {
|
||||||
|
|
||||||
// XXX: bad name. This doesn't reflect the fact that ModelNW is a ModelUnit, not a Model.
|
// 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 nn::g3d::ICalculateWorldCallback,
|
||||||
public sead::hostio::Node {
|
public sead::hostio::Node {
|
||||||
SEAD_RTTI_OVERRIDE(ModelNW, ModelUnit)
|
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
|
} // namespace gsys
|
||||||
|
|
|
@ -1,17 +1,166 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <basis/seadTypes.h>
|
||||||
|
#include <gfx/seadColor.h>
|
||||||
#include <hostio/seadHostIONode.h>
|
#include <hostio/seadHostIONode.h>
|
||||||
|
#include <math/seadBoundBox.h>
|
||||||
|
#include <math/seadMatrix.h>
|
||||||
|
#include <math/seadVector.h>
|
||||||
#include <nn/g3d/World.h>
|
#include <nn/g3d/World.h>
|
||||||
#include <prim/seadRuntimeTypeInfo.h>
|
#include <prim/seadRuntimeTypeInfo.h>
|
||||||
|
#include <prim/seadSafeString.h>
|
||||||
|
#include "gsys/gsysModelUnitDrawArray.h"
|
||||||
|
|
||||||
|
namespace agl {
|
||||||
|
class UniformBlock;
|
||||||
|
}
|
||||||
|
|
||||||
namespace gsys {
|
namespace gsys {
|
||||||
|
|
||||||
|
namespace ModelEnum {
|
||||||
|
enum class ShaderAssignType;
|
||||||
|
enum class RenderOption;
|
||||||
|
enum class RenderViewOption;
|
||||||
|
} // namespace ModelEnum
|
||||||
|
|
||||||
|
class ModelRenderUnit;
|
||||||
|
class ModelScene;
|
||||||
|
class ModelViewData;
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
class ModelUnit {
|
class ModelUnit {
|
||||||
SEAD_RTTI_BASE(ModelUnit)
|
SEAD_RTTI_BASE(ModelUnit)
|
||||||
public:
|
public:
|
||||||
|
// TODO: is this an enum/enum class or a class?
|
||||||
|
enum class BoolType;
|
||||||
|
|
||||||
ModelUnit();
|
ModelUnit();
|
||||||
virtual ~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
|
} // namespace gsys
|
||||||
|
|
|
@ -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
|
Loading…
Reference in New Issue