sead
Loading...
Searching...
No Matches
aglModelShaderAssign.h
Go to the documentation of this file.
1#pragma once
2
3#include <common/aglShaderLocation.h>
4#include <container/seadSafeArray.h>
5#include <heap/seadHeap.h>
6
7#include <nw/g3d/fnd/g3d_GfxObject.h>
8#include <nw/g3d/res/g3d_ResMaterial.h>
9#include <nw/g3d/res/g3d_ResShape.h>
10#include <nw/g3d/g3d_MaterialObj.h>
11
12namespace agl {
13
14class ShaderProgram;
15
16}
17
18namespace agl { namespace g3d {
19
21{
22 struct Attribute
23 {
25 : mIndex(0)
26 , mName("Undefined")
27 , mLocation(0)
28 {
29 }
30
34 };
35 static_assert(sizeof(Attribute) == 0x10, "agl::g3d::ModelShaderAttribute::Attribute size mismatch");
36
37public:
40
41 void create(sead::Heap* heap);
42 void clear();
43
44 void bind(const nw::g3d::res::ResMaterial* p_res_mat, const nw::g3d::res::ResShape* p_res_shp, const ShaderProgram* p_program, bool use_res_assign, bool use_shader_symbol_id);
45
46 s32 getVertexBufferNum() const { return mVertexBufferNum; }
47
48 void activateVertexBuffer() const;
49
50 const nw::g3d::fnd::GfxBuffer* getVertexBuffer(s32 index) const { return mVertexBuffer[index]; }
51 void setVertexBuffer(const nw::g3d::fnd::GfxBuffer* p_buffer, s32 index);
52
53private:
58};
59static_assert(sizeof(ModelShaderAttribute) == 0x6C, "agl::g3d::ModelShaderAttribute size mismatch");
60
62{
63public:
66
67 const ShaderProgram* getShaderProgram() const { return mpProgram; }
68
69 SamplerLocation& getSamplerLocation(s32 index) { return mSamplerLocation[index]; }
70 const SamplerLocation& getSamplerLocation(s32 index) const { return mSamplerLocation[index]; }
71
72 s32 getSamplerNum() const { return mSamplerNum; }
73 const nw::g3d::res::ResSampler* getResSampler(s32 index) const { return mResSampler[index]; }
74
75 ModelShaderAttribute& getAttribute() { return mAttribute; }
76 const ModelShaderAttribute& getAttribute() const { return mAttribute; }
77
78 void create(sead::Heap* heap);
79
80 void bind(const nw::g3d::res::ResMaterial* p_res_mat, const ShaderProgram* p_program, bool use_res_assign, bool use_shader_symbol_id);
81 void bindShaderResAssign(const nw::g3d::res::ResMaterial* p_res_mat, const nw::g3d::res::ResShape* p_res_shp, const ShaderProgram* p_program, const char* = "Mat");
82 void bindShader(const nw::g3d::res::ResMaterial* p_res_mat, const nw::g3d::res::ResShape* p_res_shp, const ShaderProgram* p_program, const char* = "Mat");
83
84 void pushBackSampler(const nw::g3d::res::ResSampler* p_res_sampler, const SamplerLocation& location);
85
86 void activateMaterialUniformBlock(const nw::g3d::MaterialObj* p_material) const;
87 void activateTextureSampler(const nw::g3d::MaterialObj* p_material) const;
88
89private:
90 void clear_();
91 void updateLocation_(const char* uniform_block_name);
92
93private:
100};
101static_assert(sizeof(ModelShaderAssign) == 0x1C4, "agl::g3d::ModelShaderAssign size mismatch");
102
103} }
Definition aglShaderLocation.h:127
Definition aglShaderProgram.h:16
Definition aglShaderLocation.h:97
Definition aglModelShaderAssign.h:62
const SamplerLocation & getSamplerLocation(s32 index) const
Definition aglModelShaderAssign.h:70
void create(sead::Heap *heap)
Definition aglModelShaderAssign.cpp:157
void bindShader(const nw::g3d::res::ResMaterial *p_res_mat, const nw::g3d::res::ResShape *p_res_shp, const ShaderProgram *p_program, const char *="Mat")
Definition aglModelShaderAssign.cpp:225
void clear_()
Definition aglModelShaderAssign.cpp:162
u8 mSamplerNum
Definition aglModelShaderAssign.h:98
sead::UnsafeArray< SamplerLocation, 16 > mSamplerLocation
Definition aglModelShaderAssign.h:96
void activateTextureSampler(const nw::g3d::MaterialObj *p_material) const
Definition aglModelShaderAssign.cpp:269
const nw::g3d::res::ResSampler * getResSampler(s32 index) const
Definition aglModelShaderAssign.h:73
sead::UnsafeArray< const nw::g3d::res::ResSampler *, 16 > mResSampler
Definition aglModelShaderAssign.h:97
SamplerLocation & getSamplerLocation(s32 index)
Definition aglModelShaderAssign.h:69
const ShaderProgram * mpProgram
Definition aglModelShaderAssign.h:94
ModelShaderAttribute & getAttribute()
Definition aglModelShaderAssign.h:75
void bind(const nw::g3d::res::ResMaterial *p_res_mat, const ShaderProgram *p_program, bool use_res_assign, bool use_shader_symbol_id)
Definition aglModelShaderAssign.cpp:171
void bindShaderResAssign(const nw::g3d::res::ResMaterial *p_res_mat, const nw::g3d::res::ResShape *p_res_shp, const ShaderProgram *p_program, const char *="Mat")
Definition aglModelShaderAssign.cpp:210
const ModelShaderAttribute & getAttribute() const
Definition aglModelShaderAssign.h:76
void updateLocation_(const char *uniform_block_name)
Definition aglModelShaderAssign.cpp:238
const ShaderProgram * getShaderProgram() const
Definition aglModelShaderAssign.h:67
~ModelShaderAssign()
Definition aglModelShaderAssign.cpp:153
void activateMaterialUniformBlock(const nw::g3d::MaterialObj *p_material) const
Definition aglModelShaderAssign.cpp:254
s32 getSamplerNum() const
Definition aglModelShaderAssign.h:72
UniformBlockLocation mUniformBlockLocation
Definition aglModelShaderAssign.h:95
ModelShaderAttribute mAttribute
Definition aglModelShaderAssign.h:99
void pushBackSampler(const nw::g3d::res::ResSampler *p_res_sampler, const SamplerLocation &location)
Definition aglModelShaderAssign.cpp:244
ModelShaderAssign()
Definition aglModelShaderAssign.cpp:147
Definition aglModelShaderAssign.h:21
s32 getVertexBufferNum() const
Definition aglModelShaderAssign.h:46
void clear()
Definition aglModelShaderAssign.cpp:30
sead::UnsafeArray< const nw::g3d::fnd::GfxBuffer *, 16 > mVertexBuffer
Definition aglModelShaderAssign.h:56
void activateVertexBuffer() const
Definition aglModelShaderAssign.cpp:130
void create(sead::Heap *heap)
Definition aglModelShaderAssign.cpp:20
~ModelShaderAttribute()
Definition aglModelShaderAssign.cpp:14
void setVertexBuffer(const nw::g3d::fnd::GfxBuffer *p_buffer, s32 index)
Definition aglModelShaderAssign.cpp:138
u8 mVertexBufferNum
Definition aglModelShaderAssign.h:55
const nw::g3d::fnd::GfxBuffer * getVertexBuffer(s32 index) const
Definition aglModelShaderAssign.h:50
ModelShaderAttribute()
Definition aglModelShaderAssign.cpp:9
void bind(const nw::g3d::res::ResMaterial *p_res_mat, const nw::g3d::res::ResShape *p_res_shp, const ShaderProgram *p_program, bool use_res_assign, bool use_shader_symbol_id)
Definition aglModelShaderAssign.cpp:38
nw::g3d::fnd::GfxFetchShader mFetchShader
Definition aglModelShaderAssign.h:57
u8 _0
Definition aglModelShaderAssign.h:54
Definition seadHeap.h:23
Definition seadSafeArray.h:257
Definition aglModelEx.cpp:4
Definition aglDisplayList.cpp:5
Definition seadAssert.h:44
SafeStringBase< char > SafeString
Definition seadSafeString.h:409
Definition aglModelShaderAssign.h:23
s32 mIndex
Definition aglModelShaderAssign.h:31
sead::SafeString mName
Definition aglModelShaderAssign.h:32
s16 mLocation
Definition aglModelShaderAssign.h:33
Attribute()
Definition aglModelShaderAssign.h:24