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>
50 shader_program = program;
52 env_location.setName(
"MdlEnvView");
53 mtx_location.setName(
"MdlMtx");
54 shp_location.setName(
"Shp");
55 mat_location.setName(
"Mat");
56 sdw_location.setName(
"cShadowMap");
57 rfl_location.setName(
"cReflectionMap");
66 env_location.search(*shader_program);
67 mtx_location.search(*shader_program);
68 shp_location.search(*shader_program);
69 mat_location.search(*shader_program);
70 sdw_location.search(*shader_program);
71 rfl_location.search(*shader_program);
100 sead::MemUtil::fill(idx_lghtmap, u8(-1),
sizeof(idx_lghtmap));
101 sead::MemUtil::fill(idx_sampler, u8(-1),
sizeof(idx_sampler));
107 static_assert(
sizeof(
LightMap) == 0x10);
115 static_assert(
sizeof(
Shape) == 0x2C);
131 static_assert(
sizeof(
DrawInfo) == 0x28);
150 void set(s32 index,
bool enable)
156 mBuffer[index >> 5] |= 1 << (index & 0x1f);
158 mBuffer[index >> 5] &= ~(1 << (index & 0x1f));
163 return mBuffer[index >> 5] & 1 << (index & 0x1f);
168 for (s32 i = 0; i < 10; i++)
178 sead::MemUtil::fill(mBuffer.getBufferPtr(), u8(-1),
sizeof(sead::BitFlag32) * 9);
180 mBuffer[9] = u32(-1);
185 sead::MemUtil::fillZero(mBuffer.getBufferPtr(),
sizeof(mBuffer));
200 void calcGPU(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
203 void updateView(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override
214 void drawOpa(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
216 void drawXlu(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
220 void drawShadowOpa(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
224 void drawReflectionOpa(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
226 void drawReflectionXlu(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
232 return mShapeFlag.isOn(4);
249 mBoundingEnableFlag.set(1 << 1);
254 return mBaseModelMtx;
260 mBoundingEnableFlag.set(1 << 1);
285 void getBoneLocalMatrix(s32 index, sead::Matrix34f* rt =
nullptr, sead::Vector3f* scale =
nullptr)
const override;
306 return mMaterial[index];
316 mBoundingEnableFlag.change(1 << 0, enable);
321 return mBoundingEnableFlag.isOn(1 << 0);
330 void calcViewShapeShadowFlags(agl::sdw::DepthShadow* depth_shadow, RenderObjLayerBase* shadow_layer, RenderObjRenderMgr* render_mgr)
override;
334 return mModelEx.GetResource()->GetName();
339 mSklAnimBlendWeight[index] = weight;
344 return mSklAnimBlendWeight[index];
361 return reinterpret_cast<Animation*
const*>(mSklAnim.getBufferPtr());
366 return reinterpret_cast<Animation*
const*>(mTexAnim.getBufferPtr());
371 return reinterpret_cast<Animation*
const*>(mShuAnim.getBufferPtr());
376 return reinterpret_cast<Animation*
const*>(mVisAnim.getBufferPtr());
381 return reinterpret_cast<Animation*
const*>(mShaAnim.getBufferPtr());
387 return const_cast<SkeletalAnimation**>(
reinterpret_cast<SkeletalAnimation*
const*>(getSklAnims()));
392 return mSklAnim.size();
397 return const_cast<TexturePatternAnimation**>(
reinterpret_cast<TexturePatternAnimation*
const*>(getTexAnims()));
402 return mTexAnim.size();
407 return const_cast<ShaderParamAnimation**>(
reinterpret_cast<ShaderParamAnimation*
const*>(getShuAnims()));
412 return mShuAnim.size();
417 return const_cast<VisibilityAnimation**>(
reinterpret_cast<VisibilityAnimation*
const*>(getVisAnims()));
423 return mVisAnim.size();
428 return const_cast<ShapeAnimation**>(
reinterpret_cast<ShapeAnimation*
const*>(getShaAnims()));
433 return mShaAnim.size();
438 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);
450 void activateMaterial(
const agl::g3d::ModelShaderAssign& shader_assign,
const nw::g3d::MaterialObj* material,
const LightMap& light_map)
const;
509static_assert(
sizeof(
ModelG3d) == 0x1AC);
Definition CullViewFrustum.h:16
Definition ModelG3d.h:143
bool get(s32 index) const
Definition ModelG3d.h:161
bool any() const
Definition ModelG3d.h:166
void setAll()
Definition ModelG3d.h:175
BoundingFlagArray()
Definition ModelG3d.h:145
sead::UnsafeArray< u32, 10 > mBuffer
Definition ModelG3d.h:189
void resetAll()
Definition ModelG3d.h:183
void set(s32 index, bool enable)
Definition ModelG3d.h:150
bool isBoundingEnable() const override
Definition ModelG3d.h:319
const sead::Vector3f & getLocalScale() const override
Definition ModelG3d.h:263
sead::Matrix34f mBaseModelMtx
Definition ModelG3d.h:495
u32 getVisAnimBufferSize() const
Definition ModelG3d.h:421
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:504
void setDisplayListDirty()
sead::BitFlag32 mRenderFlag
Definition ModelG3d.h:498
void setBaseModelMtx(const sead::Matrix34f &mtx) override
Definition ModelG3d.h:246
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:490
u32 getShuAnimBufferSize() const
Definition ModelG3d.h:410
ShaderParamAnimation ** getShuAnimBuffer()
Definition ModelG3d.h:405
void applyBlendWeight_(s32 shape_index)
void setTexAnim(s32 index, Animation *anim) override
bool isBoneVisible(s32 index) const override
sead::BitFlag32 mViewDepthShadowEnableFlag
Definition ModelG3d.h:506
sead::Buffer< SkeletalAnimation * > mSklAnim
Definition ModelG3d.h:480
const char * getMaterialName(s32 index) const override
const sead::Matrix34f & getBaseModelMtx() const override
Definition ModelG3d.h:252
Animation *const * getShuAnims() const override
Definition ModelG3d.h:369
sead::Sphere3f mBounding
Definition ModelG3d.h:501
void setMaterialVisible(s32 index, bool visible) override
sead::Buffer< MaterialG3d * > mMaterial
Definition ModelG3d.h:493
bool hasOpa() const override
SkeletalAnimation ** getSklAnimBuffer()
Definition ModelG3d.h:385
bool hasShadow() const override
Definition ModelG3d.h:230
nw::g3d::SkeletalAnimBlender mSklAnimBlender
Definition ModelG3d.h:479
bool mDisplayListDirty
Definition ModelG3d.h:507
s32 searchMaterialIndex(const sead::SafeString &name) const override
void setBoneWorldMatrix(s32 index, const sead::Matrix34f &mtx) override
VisibilityAnimation ** getVisAnimBuffer()
Definition ModelG3d.h:415
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:447
SamplerSlot
Definition ModelG3d.h:134
@ cSamplerSlot_ReflectionMap
Definition ModelG3d.h:136
@ cSamplerSlot_LightMap_0
Definition ModelG3d.h:135
@ cSamplerSlot_ShadowMap
Definition ModelG3d.h:137
void setLocalScale(const sead::Vector3f &scale) override
Definition ModelG3d.h:257
const char * getBoneName(s32 index) const override
f32 getSklAnimBlendWeight(s32 index) const override
Definition ModelG3d.h:342
sead::BitFlag32 mShapeFlag
Definition ModelG3d.h:503
void calcViewShapeShadowFlags(agl::sdw::DepthShadow *depth_shadow, RenderObjLayerBase *shadow_layer, RenderObjRenderMgr *render_mgr) override
void * mSklAnimBlenderBuffer
Definition ModelG3d.h:488
sead::Buffer< VisibilityAnimation * > mVisAnim
Definition ModelG3d.h:483
void setSklAnimBlendWeight(s32 index, f32 weight) override
Definition ModelG3d.h:337
void drawShape_(DrawInfo &draw_info, const ShapeRenderInfo &render_info, const RenderObjRenderMgr *render_mgr) const
u8 _128
Definition ModelG3d.h:497
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:481
agl::g3d::ModelEx * getModelEx()
Definition ModelG3d.h:440
u32 getTexAnimBufferSize() const
Definition ModelG3d.h:400
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:492
u32 getBoneNum() const override
bool hasXlu() const override
Shape & getShape(s32 index)
Definition ModelG3d.h:443
u32 getShaAnimBufferSize() const
Definition ModelG3d.h:431
sead::BitFlag32 mBoundingEnableFlag
Definition ModelG3d.h:499
sead::Buffer< ShaderParamAnimation * > mShuAnim
Definition ModelG3d.h:482
const sead::Sphere3f & getBounding() const override
Definition ModelG3d.h:324
void * mBuffer
Definition ModelG3d.h:485
static void setBoundingFlagArray_(BoundingFlagArray &flag_array, const SkeletalAnimation &anim)
agl::g3d::ModelEx mModelEx
Definition ModelG3d.h:478
void drawOpa_(DrawInfo &draw_info, const RenderObjRenderMgr *render_mgr) const
const Shape & getShape(s32 index) const
Definition ModelG3d.h:444
TexturePatternAnimation ** getTexAnimBuffer()
Definition ModelG3d.h:395
void setShaAnim(s32 index, Animation *anim) override
sead::Vector3f mLocalScale
Definition ModelG3d.h:496
Animation *const * getTexAnims() const override
Definition ModelG3d.h:364
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:332
u32 getSklAnimBufferSize() const
Definition ModelG3d.h:390
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:359
sead::BitFlag32 & getRenderFlag()
Definition ModelG3d.h:446
Animation *const * getShaAnims() const override
Definition ModelG3d.h:379
s32 searchBoneIndex(const sead::SafeString &name) const override
const agl::g3d::ModelEx * getModelEx() const
Definition ModelG3d.h:441
sead::PtrArray< ShapeRenderInfo > mXluShapeInfo
Definition ModelG3d.h:491
Material * getMaterial(s32 index) const override
Definition ModelG3d.h:304
BoundingFlagArray mSubBoundingFlagArray
Definition ModelG3d.h:505
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:203
void activateMaterial(const agl::g3d::ModelShaderAssign &shader_assign, const nw::g3d::MaterialObj *material, const LightMap &light_map) const
sead::BoundBox3f * mSubBounding
Definition ModelG3d.h:502
void setBoundingEnable(bool enable) override
Definition ModelG3d.h:314
void setShuAnim(s32 index, Animation *anim) override
sead::Buffer< f32 > mSklAnimBlendWeight
Definition ModelG3d.h:489
sead::Buffer< ShapeAnimation * > mShaAnim
Definition ModelG3d.h:484
Animation *const * getVisAnims() const override
Definition ModelG3d.h:374
ShapeAnimation ** getShaAnimBuffer()
Definition ModelG3d.h:426
sead::Buffer< Shape > mShape
Definition ModelG3d.h:494
void * mBlockBuffer
Definition ModelG3d.h:486
size_t mBlockBufferSize
Definition ModelG3d.h:487
void setVisAnim(s32 index, Animation *anim) override
Definition ModelG3d.h:118
const agl::ShaderProgram * shader_program
Definition ModelG3d.h:122
ShaderAssign * shader_assign
Definition ModelG3d.h:123
agl::ShaderMode shader_mode
Definition ModelG3d.h:127
bool draw_shape
Definition ModelG3d.h:125
s32 polygon_offset
Definition ModelG3d.h:128
bool draw_reflection
Definition ModelG3d.h:126
const sead::Matrix44f * proj_mtx
Definition ModelG3d.h:121
const sead::Matrix34f * view_mtx
Definition ModelG3d.h:120
const CullViewFrustum * cull
Definition ModelG3d.h:129
s32 material_index
Definition ModelG3d.h:124
s32 view_index
Definition ModelG3d.h:119
s32 idx_lghtmap[LightMapMgr::cLightMapNum]
Definition ModelG3d.h:104
void clear()
Definition ModelG3d.h:98
s32 idx_sampler[LightMapMgr::cLightMapNum]
Definition ModelG3d.h:105
agl::UniformBlockLocation env_location
Definition ModelG3d.h:76
agl::UniformBlockLocation mtx_location
Definition ModelG3d.h:77
agl::SamplerLocation rfl_location
Definition ModelG3d.h:81
const agl::ShaderProgram * shader_program
Definition ModelG3d.h:75
void updateLocation()
Definition ModelG3d.h:62
agl::SamplerLocation sdw_location
Definition ModelG3d.h:80
agl::UniformBlockLocation shp_location
Definition ModelG3d.h:78
void initialize(const agl::ShaderProgram *program)
Definition ModelG3d.h:48
agl::UniformBlockLocation mat_location
Definition ModelG3d.h:79
s32 priority
Definition ModelG3d.h:88
agl::DisplayList attrib_dl
Definition ModelG3d.h:91
sead::BitFlag32 flag
Definition ModelG3d.h:89
s32 idx_shape
Definition ModelG3d.h:87
agl::DisplayList mat_dl
Definition ModelG3d.h:92
s32 polygon_offset
Definition ModelG3d.h:90
Definition ModelG3d.h:110
LightMap light_map
Definition ModelG3d.h:112
sead::Buffer< nw::g3d::fnd::GfxBuffer > vtx_buffer
Definition ModelG3d.h:113
agl::UniformBlock uniform_block
Definition ModelG3d.h:111