3#include <graphics/LightMapMgr.h>
4#include <graphics/MaterialG3d.h>
5#include <graphics/Model.h>
6#include <graphics/ShaderParamAnimation.h>
7#include <graphics/ShapeAnimation.h>
8#include <graphics/SkeletalAnimation.h>
9#include <graphics/TexturePatternAnimation.h>
10#include <graphics/VisibilityAnimation.h>
12#include <common/aglDisplayList.h>
13#include <common/aglShaderProgramArchive.h>
14#include <common/aglUniformBlock.h>
15#include <container/seadBuffer.h>
16#include <container/seadPtrArray.h>
17#include <container/seadSafeArray.h>
18#include <g3d/aglModelEx.h>
19#include <math/seadBoundBox.h>
21#include <nw/g3d/g3d_SkeletalAnimObj.h>
22#include <nw/g3d/g3d_ShapeObj.h>
49 shader_program = program;
51 env_location.setName(
"MdlEnvView");
52 mtx_location.setName(
"MdlMtx");
53 shp_location.setName(
"Shp");
54 mat_location.setName(
"Mat");
55 sdw_location.setName(
"cShadowMap");
56 rfl_location.setName(
"cReflectionMap");
65 env_location.search(*shader_program);
66 mtx_location.search(*shader_program);
67 shp_location.search(*shader_program);
68 mat_location.search(*shader_program);
69 sdw_location.search(*shader_program);
70 rfl_location.search(*shader_program);
99 sead::MemUtil::fill(idx_lghtmap, u8(-1),
sizeof(idx_lghtmap));
100 sead::MemUtil::fill(idx_sampler, u8(-1),
sizeof(idx_sampler));
106 static_assert(
sizeof(
LightMap) == 0x10);
114 static_assert(
sizeof(
Shape) == 0x2C);
130 static_assert(
sizeof(
DrawInfo) == 0x28);
149 void set(s32 index,
bool enable)
155 mBuffer[index >> 5] |= 1 << (index & 0x1f);
157 mBuffer[index >> 5] &= ~(1 << (index & 0x1f));
162 return mBuffer[index >> 5] & 1 << (index & 0x1f);
167 for (s32 i = 0; i < 10; i++)
177 sead::MemUtil::fill(mBuffer.getBufferPtr(), u8(-1),
sizeof(sead::BitFlag32) * 9);
179 mBuffer[9] = u32(-1);
184 sead::MemUtil::fillZero(mBuffer.getBufferPtr(),
sizeof(mBuffer));
199 void calcGPU(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
202 void updateView(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override
213 void drawOpa(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
215 void drawXlu(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
219 void drawShadowOpa(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
223 void drawReflectionOpa(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
225 void drawReflectionXlu(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
231 return mShapeFlag.isOn(4);
248 mBoundingEnableFlag.set(1 << 1);
253 return mBaseModelMtx;
259 mBoundingEnableFlag.set(1 << 1);
284 void getBoneLocalMatrix(s32 index, sead::Matrix34f* rt =
nullptr, sead::Vector3f* scale =
nullptr)
const override;
305 return mMaterial[index];
315 mBoundingEnableFlag.change(1 << 0, enable);
320 return mBoundingEnableFlag.isOn(1 << 0);
329 void calcViewShapeShadowFlags(agl::sdw::DepthShadow* depth_shadow, RenderObjLayerBase* shadow_layer, RenderObjRenderMgr* render_mgr)
override;
333 return mModelEx.GetResource()->GetName();
338 mSklAnimBlendWeight[index] = weight;
343 return mSklAnimBlendWeight[index];
360 return reinterpret_cast<Animation*
const*>(mSklAnim.getBufferPtr());
365 return reinterpret_cast<Animation*
const*>(mTexAnim.getBufferPtr());
370 return reinterpret_cast<Animation*
const*>(mShuAnim.getBufferPtr());
375 return reinterpret_cast<Animation*
const*>(mVisAnim.getBufferPtr());
380 return reinterpret_cast<Animation*
const*>(mShaAnim.getBufferPtr());
386 return const_cast<SkeletalAnimation**>(
reinterpret_cast<SkeletalAnimation*
const*>(getSklAnims()));
391 return mSklAnim.size();
396 return const_cast<TexturePatternAnimation**>(
reinterpret_cast<TexturePatternAnimation*
const*>(getTexAnims()));
401 return mTexAnim.size();
406 return const_cast<ShaderParamAnimation**>(
reinterpret_cast<ShaderParamAnimation*
const*>(getShuAnims()));
411 return mShuAnim.size();
416 return const_cast<VisibilityAnimation**>(
reinterpret_cast<VisibilityAnimation*
const*>(getVisAnims()));
422 return mVisAnim.size();
427 return const_cast<ShapeAnimation**>(
reinterpret_cast<ShapeAnimation*
const*>(getShaAnims()));
432 return mShaAnim.size();
437 void initialize(nw::g3d::res::ResModel* res_model,
const agl::ShaderProgramArchive* shader_archive, s32 num_view, s32 num_skl_anim, s32 num_tex_anim, s32 num_shu_anim, s32 num_vis_anim, s32 num_sha_anim, BoundingMode bounding_mode, sead::Heap* heap);
449 void activateMaterial(
const agl::g3d::ModelShaderAssign& shader_assign,
const nw::g3d::MaterialObj* material,
const LightMap& light_map)
const;
508static_assert(
sizeof(
ModelG3d) == 0x1AC);
Definition CullViewFrustum.h:16
Definition ModelG3d.h:142
bool get(s32 index) const
Definition ModelG3d.h:160
bool any() const
Definition ModelG3d.h:165
void setAll()
Definition ModelG3d.h:174
BoundingFlagArray()
Definition ModelG3d.h:144
sead::UnsafeArray< u32, 10 > mBuffer
Definition ModelG3d.h:188
void resetAll()
Definition ModelG3d.h:182
void set(s32 index, bool enable)
Definition ModelG3d.h:149
bool isBoundingEnable() const override
Definition ModelG3d.h:318
const sead::Vector3f & getLocalScale() const override
Definition ModelG3d.h:262
sead::Matrix34f mBaseModelMtx
Definition ModelG3d.h:494
u32 getVisAnimBufferSize() const
Definition ModelG3d.h:420
void createViewShapeShadowFlagBuffer_(s32 num_view, sead::Heap *heap)
void setSklAnim(s32 index, Animation *anim) override
void drawXlu_(DrawInfo &draw_info, const RenderObjRenderMgr *render_mgr) const
void drawReflectionXlu(s32 view_index, const sead::Matrix34f &view_mtx, const sead::Matrix44f &proj_mtx, RenderObjRenderMgr *render_mgr) override
void initializeShapeRenderInfo_(ShapeRenderInfo &render_info, const nw::g3d::MaterialObj *material, const nw::g3d::ShapeObj *shape)
void calcGPU(s32 view_index, const sead::Matrix34f &view_mtx, const sead::Matrix44f &proj_mtx, RenderObjRenderMgr *render_mgr) override
BoundingFlagArray mBoundingFlagArray
Definition ModelG3d.h:503
void setDisplayListDirty()
sead::BitFlag32 mRenderFlag
Definition ModelG3d.h:497
void setBaseModelMtx(const sead::Matrix34f &mtx) override
Definition ModelG3d.h:245
void drawShadowOpa(s32 view_index, const sead::Matrix34f &view_mtx, const sead::Matrix44f &proj_mtx, RenderObjRenderMgr *render_mgr) override
static s32 sortShapeRenderInfoCmp(const ShapeRenderInfo *a, const ShapeRenderInfo *b)
void setBoneVisible(s32 index, bool visible) override
void initialize(nw::g3d::res::ResModel *res_model, const agl::ShaderProgramArchive *shader_archive, s32 num_view, s32 num_skl_anim, s32 num_tex_anim, s32 num_shu_anim, s32 num_vis_anim, s32 num_sha_anim, BoundingMode bounding_mode, sead::Heap *heap)
sead::PtrArray< ShapeRenderInfo > mOpaShapeInfo
Definition ModelG3d.h:489
u32 getShuAnimBufferSize() const
Definition ModelG3d.h:409
ShaderParamAnimation ** getShuAnimBuffer()
Definition ModelG3d.h:404
void applyBlendWeight_(s32 shape_index)
void setTexAnim(s32 index, Animation *anim) override
bool isBoneVisible(s32 index) const override
sead::BitFlag32 mViewDepthShadowEnableFlag
Definition ModelG3d.h:505
sead::Buffer< SkeletalAnimation * > mSklAnim
Definition ModelG3d.h:479
const char * getMaterialName(s32 index) const override
const sead::Matrix34f & getBaseModelMtx() const override
Definition ModelG3d.h:251
Animation *const * getShuAnims() const override
Definition ModelG3d.h:368
sead::Sphere3f mBounding
Definition ModelG3d.h:500
void setMaterialVisible(s32 index, bool visible) override
sead::Buffer< MaterialG3d * > mMaterial
Definition ModelG3d.h:492
bool hasOpa() const override
SkeletalAnimation ** getSklAnimBuffer()
Definition ModelG3d.h:384
bool hasShadow() const override
Definition ModelG3d.h:229
nw::g3d::SkeletalAnimBlender mSklAnimBlender
Definition ModelG3d.h:478
bool mDisplayListDirty
Definition ModelG3d.h:506
s32 searchMaterialIndex(const sead::SafeString &name) const override
void setBoneWorldMatrix(s32 index, const sead::Matrix34f &mtx) override
VisibilityAnimation ** getVisAnimBuffer()
Definition ModelG3d.h:414
void drawXlu(s32 view_index, const sead::Matrix34f &view_mtx, const sead::Matrix44f &proj_mtx, RenderObjRenderMgr *render_mgr) override
const sead::BitFlag32 & getRenderFlag() const
Definition ModelG3d.h:446
SamplerSlot
Definition ModelG3d.h:133
@ cSamplerSlot_ReflectionMap
Definition ModelG3d.h:135
@ cSamplerSlot_LightMap_0
Definition ModelG3d.h:134
@ cSamplerSlot_ShadowMap
Definition ModelG3d.h:136
void setLocalScale(const sead::Vector3f &scale) override
Definition ModelG3d.h:256
const char * getBoneName(s32 index) const override
f32 getSklAnimBlendWeight(s32 index) const override
Definition ModelG3d.h:341
sead::BitFlag32 mShapeFlag
Definition ModelG3d.h:502
void calcViewShapeShadowFlags(agl::sdw::DepthShadow *depth_shadow, RenderObjLayerBase *shadow_layer, RenderObjRenderMgr *render_mgr) override
void * mSklAnimBlenderBuffer
Definition ModelG3d.h:487
sead::Buffer< VisibilityAnimation * > mVisAnim
Definition ModelG3d.h:482
void setSklAnimBlendWeight(s32 index, f32 weight) override
Definition ModelG3d.h:336
void drawShape_(DrawInfo &draw_info, const ShapeRenderInfo &render_info, const RenderObjRenderMgr *render_mgr) const
u8 _128
Definition ModelG3d.h:496
void drawReflectionOpa(s32 view_index, const sead::Matrix34f &view_mtx, const sead::Matrix44f &proj_mtx, RenderObjRenderMgr *render_mgr) override
sead::Buffer< TexturePatternAnimation * > mTexAnim
Definition ModelG3d.h:480
agl::g3d::ModelEx * getModelEx()
Definition ModelG3d.h:439
u32 getTexAnimBufferSize() const
Definition ModelG3d.h:399
void drawOpa(s32 view_index, const sead::Matrix34f &view_mtx, const sead::Matrix44f &proj_mtx, RenderObjRenderMgr *render_mgr) override
sead::Buffer< ShaderAssign > mShaderAssign
Definition ModelG3d.h:491
u32 getBoneNum() const override
bool hasXlu() const override
Shape & getShape(s32 index)
Definition ModelG3d.h:442
u32 getShaAnimBufferSize() const
Definition ModelG3d.h:430
sead::BitFlag32 mBoundingEnableFlag
Definition ModelG3d.h:498
sead::Buffer< ShaderParamAnimation * > mShuAnim
Definition ModelG3d.h:481
const sead::Sphere3f & getBounding() const override
Definition ModelG3d.h:323
void * mBuffer
Definition ModelG3d.h:484
static void setBoundingFlagArray_(BoundingFlagArray &flag_array, const SkeletalAnimation &anim)
agl::g3d::ModelEx mModelEx
Definition ModelG3d.h:477
void drawOpa_(DrawInfo &draw_info, const RenderObjRenderMgr *render_mgr) const
const Shape & getShape(s32 index) const
Definition ModelG3d.h:443
TexturePatternAnimation ** getTexAnimBuffer()
Definition ModelG3d.h:394
void setShaAnim(s32 index, Animation *anim) override
sead::Vector3f mLocalScale
Definition ModelG3d.h:495
Animation *const * getTexAnims() const override
Definition ModelG3d.h:363
void setBoneLocalMatrix(s32 index, const sead::Matrix34f &rt, const sead::Vector3f &scale) override
bool isMaterialVisible(s32 index) const override
sead::SafeString getName() const override
Definition ModelG3d.h:331
u32 getSklAnimBufferSize() const
Definition ModelG3d.h:389
void getBoneWorldMatrix(s32 index, sead::Matrix34f *mtx) const override
void getBoneLocalMatrix(s32 index, sead::Matrix34f *rt=nullptr, sead::Vector3f *scale=nullptr) const override
Animation *const * getSklAnims() const override
Definition ModelG3d.h:358
sead::BitFlag32 & getRenderFlag()
Definition ModelG3d.h:445
Animation *const * getShaAnims() const override
Definition ModelG3d.h:378
s32 searchBoneIndex(const sead::SafeString &name) const override
const agl::g3d::ModelEx * getModelEx() const
Definition ModelG3d.h:440
sead::PtrArray< ShapeRenderInfo > mXluShapeInfo
Definition ModelG3d.h:490
Material * getMaterial(s32 index) const override
Definition ModelG3d.h:303
BoundingFlagArray mSubBoundingFlagArray
Definition ModelG3d.h:504
u32 getMaterialNum() const override
void updateView(s32 view_index, const sead::Matrix34f &view_mtx, const sead::Matrix44f &proj_mtx, RenderObjRenderMgr *render_mgr) override
Definition ModelG3d.h:202
void activateMaterial(const agl::g3d::ModelShaderAssign &shader_assign, const nw::g3d::MaterialObj *material, const LightMap &light_map) const
sead::BoundBox3f * mSubBounding
Definition ModelG3d.h:501
void setBoundingEnable(bool enable) override
Definition ModelG3d.h:313
void setShuAnim(s32 index, Animation *anim) override
sead::Buffer< f32 > mSklAnimBlendWeight
Definition ModelG3d.h:488
sead::Buffer< ShapeAnimation * > mShaAnim
Definition ModelG3d.h:483
Animation *const * getVisAnims() const override
Definition ModelG3d.h:373
ShapeAnimation ** getShaAnimBuffer()
Definition ModelG3d.h:425
sead::Buffer< Shape > mShape
Definition ModelG3d.h:493
void * mBlockBuffer
Definition ModelG3d.h:485
size_t mBlockBufferSize
Definition ModelG3d.h:486
void setVisAnim(s32 index, Animation *anim) override
Definition ModelG3d.h:117
const agl::ShaderProgram * shader_program
Definition ModelG3d.h:121
ShaderAssign * shader_assign
Definition ModelG3d.h:122
agl::ShaderMode shader_mode
Definition ModelG3d.h:126
bool draw_shape
Definition ModelG3d.h:124
s32 polygon_offset
Definition ModelG3d.h:127
bool draw_reflection
Definition ModelG3d.h:125
const sead::Matrix44f * proj_mtx
Definition ModelG3d.h:120
const sead::Matrix34f * view_mtx
Definition ModelG3d.h:119
const CullViewFrustum * cull
Definition ModelG3d.h:128
s32 material_index
Definition ModelG3d.h:123
s32 view_index
Definition ModelG3d.h:118
s32 idx_lghtmap[LightMapMgr::cLightMapNum]
Definition ModelG3d.h:103
void clear()
Definition ModelG3d.h:97
s32 idx_sampler[LightMapMgr::cLightMapNum]
Definition ModelG3d.h:104
agl::UniformBlockLocation env_location
Definition ModelG3d.h:75
agl::UniformBlockLocation mtx_location
Definition ModelG3d.h:76
agl::SamplerLocation rfl_location
Definition ModelG3d.h:80
const agl::ShaderProgram * shader_program
Definition ModelG3d.h:74
void updateLocation()
Definition ModelG3d.h:61
agl::SamplerLocation sdw_location
Definition ModelG3d.h:79
agl::UniformBlockLocation shp_location
Definition ModelG3d.h:77
void initialize(const agl::ShaderProgram *program)
Definition ModelG3d.h:47
agl::UniformBlockLocation mat_location
Definition ModelG3d.h:78
s32 priority
Definition ModelG3d.h:87
agl::DisplayList attrib_dl
Definition ModelG3d.h:90
sead::BitFlag32 flag
Definition ModelG3d.h:88
s32 idx_shape
Definition ModelG3d.h:86
agl::DisplayList mat_dl
Definition ModelG3d.h:91
s32 polygon_offset
Definition ModelG3d.h:89
Definition ModelG3d.h:109
LightMap light_map
Definition ModelG3d.h:111
sead::Buffer< nw::g3d::fnd::GfxBuffer > vtx_buffer
Definition ModelG3d.h:112
agl::UniformBlock uniform_block
Definition ModelG3d.h:110