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>
87 sead::MemUtil::fill(idx_lghtmap, u8(-1),
sizeof(idx_lghtmap));
88 sead::MemUtil::fill(idx_sampler, u8(-1),
sizeof(idx_sampler));
94 static_assert(
sizeof(
LightMap) == 0x10);
102 static_assert(
sizeof(
Shape) == 0x2C);
118 static_assert(
sizeof(
DrawInfo) == 0x28);
137 void set(s32 index,
bool enable)
143 mBuffer[index >> 5] |= 1 << (index & 0x1f);
145 mBuffer[index >> 5] &= ~(1 << (index & 0x1f));
150 return mBuffer[index >> 5] & 1 << (index & 0x1f);
155 for (s32 i = 0; i < 10; i++)
165 sead::MemUtil::fill(mBuffer.getBufferPtr(), u8(-1),
sizeof(sead::BitFlag32) * 9);
167 mBuffer[9] = u32(-1);
172 sead::MemUtil::fillZero(mBuffer.getBufferPtr(),
sizeof(mBuffer));
187 void calcGPU(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
190 void updateView(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override
201 void drawOpa(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
203 void drawXlu(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
207 void drawShadowOpa(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
211 void drawReflectionOpa(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
213 void drawReflectionXlu(s32 view_index,
const sead::Matrix34f& view_mtx,
const sead::Matrix44f& proj_mtx, RenderObjRenderMgr* render_mgr)
override;
219 return mShapeFlag.isOn(4);
237 mBoundingEnableFlag.set(1 << 1);
245 void setScale(
const sead::Vector3f& scale)
override
248 mBoundingEnableFlag.set(1 << 1);
273 void getBoneLocalMatrix(s32 index, sead::Matrix34f* rt =
nullptr, sead::Vector3f* scale =
nullptr)
const override;
294 return mMaterial[index];
304 mBoundingEnableFlag.change(1 << 0, enable);
309 return mBoundingEnableFlag.isOn(1 << 0);
318 void calcViewShapeShadowFlags(agl::sdw::DepthShadow* depth_shadow, RenderObjLayerBase* shadow_layer, RenderObjRenderMgr* render_mgr)
override;
322 return mModelEx.GetResource()->GetName();
327 mSklAnimBlendWeight[index] = weight;
332 return mSklAnimBlendWeight[index];
349 return reinterpret_cast<Animation*
const*>(mSklAnim.getBufferPtr());
354 return reinterpret_cast<Animation*
const*>(mTexAnim.getBufferPtr());
359 return reinterpret_cast<Animation*
const*>(mShuAnim.getBufferPtr());
364 return reinterpret_cast<Animation*
const*>(mVisAnim.getBufferPtr());
369 return reinterpret_cast<Animation*
const*>(mShaAnim.getBufferPtr());
375 return const_cast<SkeletalAnimation**>(
reinterpret_cast<SkeletalAnimation*
const*>(getSklAnims()));
380 return const_cast<TexturePatternAnimation**>(
reinterpret_cast<TexturePatternAnimation*
const*>(getTexAnims()));
385 return const_cast<ShaderParamAnimation**>(
reinterpret_cast<ShaderParamAnimation*
const*>(getShuAnims()));
390 return const_cast<VisibilityAnimation**>(
reinterpret_cast<VisibilityAnimation*
const*>(getVisAnims()));
395 return const_cast<ShapeAnimation**>(
reinterpret_cast<ShapeAnimation*
const*>(getShaAnims()));
400 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);
412 void activateMaterial(
const agl::g3d::ModelShaderAssign& shader_assign,
const nw::g3d::MaterialObj* material,
const LightMap& light_map)
const;
471static_assert(
sizeof(
ModelG3d) == 0x1AC);
Definition CullViewFrustum.h:16
Definition ModelG3d.h:130
bool get(s32 index) const
Definition ModelG3d.h:148
bool any() const
Definition ModelG3d.h:153
void setAll()
Definition ModelG3d.h:162
BoundingFlagArray()
Definition ModelG3d.h:132
sead::UnsafeArray< u32, 10 > mBuffer
Definition ModelG3d.h:176
void resetAll()
Definition ModelG3d.h:170
void set(s32 index, bool enable)
Definition ModelG3d.h:137
bool isBoundingEnable() const override
Definition ModelG3d.h:307
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:466
void setDisplayListDirty()
void setMtxRT(const sead::Matrix34f &rt) override
Definition ModelG3d.h:234
sead::BitFlag32 mRenderFlag
Definition ModelG3d.h:460
void drawShadowOpa(s32 view_index, const sead::Matrix34f &view_mtx, const sead::Matrix44f &proj_mtx, RenderObjRenderMgr *render_mgr) override
agl::g3d::ModelEx & getModelEx()
Definition ModelG3d.h:402
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:452
ShaderParamAnimation ** getShuAnimBuffer()
Definition ModelG3d.h:383
void applyBlendWeight_(s32 shape_index)
void setTexAnim(s32 index, Animation *anim) override
void setScale(const sead::Vector3f &scale) override
Definition ModelG3d.h:245
bool isBoneVisible(s32 index) const override
sead::BitFlag32 mViewDepthShadowEnableFlag
Definition ModelG3d.h:468
sead::Buffer< SkeletalAnimation * > mSklAnim
Definition ModelG3d.h:442
const char * getMaterialName(s32 index) const override
const sead::Vector3f & getScale() const override
Definition ModelG3d.h:251
Animation *const * getShuAnims() const override
Definition ModelG3d.h:357
sead::Sphere3f mBounding
Definition ModelG3d.h:463
const sead::Matrix34f & getMtxRT() const override
Definition ModelG3d.h:240
void setMaterialVisible(s32 index, bool visible) override
sead::Buffer< MaterialG3d * > mMaterial
Definition ModelG3d.h:455
bool hasOpa() const override
SkeletalAnimation ** getSklAnimBuffer()
Definition ModelG3d.h:373
bool hasShadow() const override
Definition ModelG3d.h:217
nw::g3d::SkeletalAnimBlender mSklAnimBlender
Definition ModelG3d.h:441
bool mDisplayListDirty
Definition ModelG3d.h:469
s32 searchMaterialIndex(const sead::SafeString &name) const override
void setBoneWorldMatrix(s32 index, const sead::Matrix34f &mtx) override
VisibilityAnimation ** getVisAnimBuffer()
Definition ModelG3d.h:388
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:409
SamplerSlot
Definition ModelG3d.h:121
@ cSamplerSlot_ReflectionMap
Definition ModelG3d.h:123
@ cSamplerSlot_LightMap_0
Definition ModelG3d.h:122
@ cSamplerSlot_ShadowMap
Definition ModelG3d.h:124
sead::Vector3f mScale
Definition ModelG3d.h:458
const char * getBoneName(s32 index) const override
f32 getSklAnimBlendWeight(s32 index) const override
Definition ModelG3d.h:330
sead::BitFlag32 mShapeFlag
Definition ModelG3d.h:465
void calcViewShapeShadowFlags(agl::sdw::DepthShadow *depth_shadow, RenderObjLayerBase *shadow_layer, RenderObjRenderMgr *render_mgr) override
const agl::g3d::ModelEx & getModelEx() const
Definition ModelG3d.h:403
void * mSklAnimBlenderBuffer
Definition ModelG3d.h:450
sead::Buffer< VisibilityAnimation * > mVisAnim
Definition ModelG3d.h:445
void setSklAnimBlendWeight(s32 index, f32 weight) override
Definition ModelG3d.h:325
void drawShape_(DrawInfo &draw_info, const ShapeRenderInfo &render_info, const RenderObjRenderMgr *render_mgr) const
u8 _128
Definition ModelG3d.h:459
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:443
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:454
u32 getBoneNum() const override
bool hasXlu() const override
Shape & getShape(s32 index)
Definition ModelG3d.h:405
sead::Matrix34f mMtxRT
Definition ModelG3d.h:457
sead::BitFlag32 mBoundingEnableFlag
Definition ModelG3d.h:461
sead::Buffer< ShaderParamAnimation * > mShuAnim
Definition ModelG3d.h:444
const sead::Sphere3f & getBounding() const override
Definition ModelG3d.h:312
void * mBuffer
Definition ModelG3d.h:447
static void setBoundingFlagArray_(BoundingFlagArray &flag_array, const SkeletalAnimation &anim)
agl::g3d::ModelEx mModelEx
Definition ModelG3d.h:440
void drawOpa_(DrawInfo &draw_info, const RenderObjRenderMgr *render_mgr) const
const Shape & getShape(s32 index) const
Definition ModelG3d.h:406
TexturePatternAnimation ** getTexAnimBuffer()
Definition ModelG3d.h:378
void setShaAnim(s32 index, Animation *anim) override
Animation *const * getTexAnims() const override
Definition ModelG3d.h:352
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:320
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:347
sead::BitFlag32 & getRenderFlag()
Definition ModelG3d.h:408
Animation *const * getShaAnims() const override
Definition ModelG3d.h:367
s32 searchBoneIndex(const sead::SafeString &name) const override
sead::PtrArray< ShapeRenderInfo > mXluShapeInfo
Definition ModelG3d.h:453
Material * getMaterial(s32 index) const override
Definition ModelG3d.h:292
BoundingFlagArray mSubBoundingFlagArray
Definition ModelG3d.h:467
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:190
void activateMaterial(const agl::g3d::ModelShaderAssign &shader_assign, const nw::g3d::MaterialObj *material, const LightMap &light_map) const
sead::BoundBox3f * mSubBounding
Definition ModelG3d.h:464
void setBoundingEnable(bool enable) override
Definition ModelG3d.h:302
void setShuAnim(s32 index, Animation *anim) override
sead::Buffer< f32 > mSklAnimBlendWeight
Definition ModelG3d.h:451
sead::Buffer< ShapeAnimation * > mShaAnim
Definition ModelG3d.h:446
Animation *const * getVisAnims() const override
Definition ModelG3d.h:362
ShapeAnimation ** getShaAnimBuffer()
Definition ModelG3d.h:393
sead::Buffer< Shape > mShape
Definition ModelG3d.h:456
void * mBlockBuffer
Definition ModelG3d.h:448
size_t mBlockBufferSize
Definition ModelG3d.h:449
void setVisAnim(s32 index, Animation *anim) override
Definition ModelG3d.h:105
const agl::ShaderProgram * shader_program
Definition ModelG3d.h:109
ShaderAssign * shader_assign
Definition ModelG3d.h:110
agl::ShaderMode shader_mode
Definition ModelG3d.h:114
bool draw_shape
Definition ModelG3d.h:112
s32 polygon_offset
Definition ModelG3d.h:115
bool draw_reflection
Definition ModelG3d.h:113
const sead::Matrix44f * proj_mtx
Definition ModelG3d.h:108
const sead::Matrix34f * view_mtx
Definition ModelG3d.h:107
const CullViewFrustum * cull
Definition ModelG3d.h:116
s32 material_index
Definition ModelG3d.h:111
s32 view_index
Definition ModelG3d.h:106
s32 idx_lghtmap[LightMapMgr::cLightMapNum]
Definition ModelG3d.h:91
void clear()
Definition ModelG3d.h:85
s32 idx_sampler[LightMapMgr::cLightMapNum]
Definition ModelG3d.h:92
s32 priority
Definition ModelG3d.h:75
agl::DisplayList attrib_dl
Definition ModelG3d.h:78
sead::BitFlag32 flag
Definition ModelG3d.h:76
s32 idx_shape
Definition ModelG3d.h:74
agl::DisplayList mat_dl
Definition ModelG3d.h:79
s32 polygon_offset
Definition ModelG3d.h:77
LightMap light_map
Definition ModelG3d.h:99
sead::Buffer< nw::g3d::fnd::GfxBuffer > vtx_buffer
Definition ModelG3d.h:100
agl::UniformBlock uniform_block
Definition ModelG3d.h:98