3#include <common/aglDisplayList.h>
4#include <common/aglResShaderSymbol.h>
5#include <common/aglResShaderVariation.h>
6#include <common/aglShader.h>
7#include <common/aglShaderLocation.h>
8#include <container/seadBuffer.h>
9#include <container/seadSafeArray.h>
10#include <prim/seadBitFlag.h>
11#include <prim/seadNamable.h>
139 s32 index = searchVariationShaderProgramIndex(macro_num, macro_array, value_array);
140 return getVariation(index);
151 return program->validate_();
162 return mAttributeLocation[index];
168 return mUniformLocation[index];
174 return mUniformBlockLocation[index];
180 return mSamplerLocation[index];
231 return mMacroData[macro_index].mValueVariationNum;
245 static_assert(
sizeof(
MacroData) == 0x1C,
"agl::ShaderProgram::VariationBuffer::MacroData size mismatch");
254 static_assert(
sizeof(
VariationBuffer) == 0x18,
"agl::ShaderProgram::VariationBuffer size mismatch");
267 static_assert(
sizeof(
SharedData) == 0x2C,
"agl::ShaderProgram::SharedData size mismatch");
285static_assert(
sizeof(
ShaderProgram) == 0x60,
"agl::ShaderProgram size mismatch");
Definition aglShaderLocation.h:157
Definition aglDisplayList.h:12
Definition aglShader.h:75
Definition aglShader.h:106
Definition aglResShaderSymbol.h:57
Definition aglShaderLocation.h:127
Definition aglShaderProgram.h:257
VariationBuffer * mpVariationBuffer
Definition aglShaderProgram.h:259
ShaderProgram * mpOriginal
Definition aglShaderProgram.h:258
u32 _10
Definition aglShaderProgram.h:260
u32 _28
Definition aglShaderProgram.h:263
sead::UnsafeArray< ResShaderSymbolArray, cShaderSymbolType_Num > mResShaderSymbolArray
Definition aglShaderProgram.h:262
ResShaderVariationArray mResShaderVariationDefaultArray
Definition aglShaderProgram.h:261
Definition aglShaderProgram.h:235
sead::SafeString mID
Definition aglShaderProgram.h:237
u16 mValueVariationNum
Definition aglShaderProgram.h:239
sead::SafeString mName
Definition aglShaderProgram.h:236
sead::Buffer< sead::SafeString > mValue
Definition aglShaderProgram.h:238
Definition aglShaderProgram.h:210
s32 getMacroValueIndexArray(s32 index, s32 *value_index_array) const
Definition aglShaderProgram.cpp:749
void create(sead::Heap *heap)
Definition aglShaderProgram.cpp:712
s32 getMacroValueVariationNum(s32 macro_index) const
Definition aglShaderProgram.h:229
s32 searchShaderProgramIndex(s32 macro_num, const char *const *macro_array, const char *const *value_array, s32 index) const
Definition aglShaderProgram.cpp:665
sead::Buffer< ShaderProgram > mProgram
Definition aglShaderProgram.h:248
void setMacroValue(s32 macro_index, s32 value_index, const sead::SafeString &value)
Definition aglShaderProgram.cpp:660
s32 getMacroAndValueArray(s32 index, const char **macro_array, const char **value_array) const
Definition aglShaderProgram.cpp:728
void initialize(ShaderProgram *program, s32 macro_num, sead::Heap *heap)
Definition aglShaderProgram.cpp:645
ShaderProgram * mpOriginal
Definition aglShaderProgram.h:247
s32 calcVariationIndex(const s32 *value_index_array) const
Definition aglShaderProgram.cpp:765
void createMacro(s32 index, const sead::SafeString &name, const sead::SafeString &id, s32 value_num, sead::Heap *heap)
Definition aglShaderProgram.cpp:651
sead::Buffer< MacroData > mMacroData
Definition aglShaderProgram.h:249
VariationBuffer()
Definition aglShaderProgram.cpp:629
virtual ~VariationBuffer()
Definition aglShaderProgram.cpp:635
const sead::SafeString & searchMacroName(const sead::SafeString &id) const
Definition aglShaderProgram.cpp:703
Definition aglShaderProgram.h:16
void destroyUniformBlock()
Definition aglShaderProgram.cpp:605
void setResShaderSymbolArray(ShaderSymbolType type, const ResShaderSymbolArray &array)
Definition aglShaderProgram.h:52
ShaderProgram()
Definition aglShaderProgram.cpp:17
VariationBuffer * getVariation_()
Definition aglShaderProgram.h:269
s32 searchVariationShaderProgramIndex(s32 macro_num, const char *const *macro_array, const char *const *value_array) const
Definition aglShaderProgram.cpp:305
const ShaderProgram * searchVariationShaderProgram(s32 macro_num, const char *const *macro_array, const char *const *value_array) const
Definition aglShaderProgram.h:137
static const s32 cVariationValueMax
Definition aglShaderProgram.h:19
const DisplayList & getDisplayList() const
Definition aglShaderProgram.h:37
s32 getVariationMacroValueVariationNum(s32 macro_index) const
Definition aglShaderProgram.cpp:347
void initialize(const sead::SafeString &name, sead::Heap *heap)
Definition aglShaderProgram.cpp:48
const SamplerLocation & getSamplerLocation(s32 index) const
Definition aglShaderProgram.h:157
void cleanUp()
Definition aglShaderProgram.cpp:575
DisplayList mDisplayList
Definition aglShaderProgram.h:275
u32 setUpAllVariation()
Definition aglShaderProgram.cpp:248
ShaderMode activate(ShaderMode current_mode=cShaderMode_Invalid, bool use_dl=true) const
Definition aglShaderProgram.cpp:88
void createVariationBuffer(s32 macro_num, sead::Heap *heap)
Definition aglShaderProgram.cpp:61
GeometryShader mGeometryShader
Definition aglShaderProgram.h:282
sead::Buffer< UniformLocation > mUniformLocation
Definition aglShaderProgram.h:277
const AttributeLocation & getAttributeLocation(s32 index) const
Definition aglShaderProgram.h:154
const UniformLocation & getUniformLocationValidate(s32 index) const
Definition aglShaderProgram.h:165
sead::BitFlag8 mFlag
Definition aglShaderProgram.h:273
void createUniform(s32 num, sead::Heap *heap=nullptr)
Definition aglShaderProgram.cpp:167
void destroyUniform()
Definition aglShaderProgram.cpp:593
const VariationBuffer * getVariation_() const
Definition aglShaderProgram.h:270
SharedData * mpSharedData
Definition aglShaderProgram.h:283
const SamplerLocation & getSamplerLocationValidate(s32 index) const
Definition aglShaderProgram.h:177
const Shader * getShader(ShaderType type) const
Definition aglShaderProgram.cpp:125
void setShaderGX2_() const
Definition aglShaderProgram.cpp:561
DisplayList & getDisplayList()
Definition aglShaderProgram.h:32
void setVariationMacroValue(s32 macro_index, s32 value_index, const sead::SafeString &value)
Definition aglShaderProgram.cpp:72
s32 getVariationID() const
Definition aglShaderProgram.h:27
Shader * getShader(ShaderType type)
Definition aglShaderProgram.cpp:110
u16 mVariationID
Definition aglShaderProgram.h:274
sead::Buffer< SamplerLocation > mSamplerLocation
Definition aglShaderProgram.h:279
void updateUniformLocation() const
Definition aglShaderProgram.cpp:362
FragmentShader mFragmentShader
Definition aglShaderProgram.h:281
void updateSamplerLocation() const
Definition aglShaderProgram.cpp:374
static const s32 cVariationMacroMax
Definition aglShaderProgram.h:18
void setAttributeName(s32 index, const sead::SafeString &name)
Definition aglShaderProgram.cpp:154
void setUpForVariation_() const
Definition aglShaderProgram.cpp:531
const ShaderProgram * getVariation(s32 index) const
Definition aglShaderProgram.cpp:326
void createSamplerLocation(s32 num, sead::Heap *heap=nullptr)
Definition aglShaderProgram.cpp:221
void createUniformBlock(s32 num, sead::Heap *heap=nullptr)
Definition aglShaderProgram.cpp:194
const UniformBlockLocation & getUniformBlockLocation(s32 index) const
Definition aglShaderProgram.h:156
static void changeShaderMode(ShaderMode mode)
Definition aglShaderProgram.cpp:12
void updateUniformBlockLocation() const
Definition aglShaderProgram.cpp:368
void createVariation(sead::Heap *heap)
Definition aglShaderProgram.cpp:77
sead::Buffer< UniformBlockLocation > mUniformBlockLocation
Definition aglShaderProgram.h:278
const UniformBlockLocation & getUniformBlockLocationValidate(s32 index) const
Definition aglShaderProgram.h:171
const AttributeLocation & getAttributeLocationValidate(s32 index) const
Definition aglShaderProgram.h:159
VertexShader mVertexShader
Definition aglShaderProgram.h:280
void setUniformName(s32 index, const sead::SafeString &name)
Definition aglShaderProgram.cpp:181
void setSamplerLocationName(s32 index, const sead::SafeString &name)
Definition aglShaderProgram.cpp:235
void reserveSetUpAllVariation()
Definition aglShaderProgram.cpp:273
void setUniformBlockName(s32 index, const sead::SafeString &name)
Definition aglShaderProgram.cpp:208
void createVariationMacro(s32 index, const sead::SafeString &name, const sead::SafeString &id, s32 value_num, sead::Heap *heap)
Definition aglShaderProgram.cpp:67
void createAttribute(s32 num, sead::Heap *heap=nullptr)
Definition aglShaderProgram.cpp:140
const sead::SafeString & getName() const
Definition aglShaderProgram.h:42
const sead::SafeString & searchVariationMacroName(const sead::SafeString &id) const
Definition aglShaderProgram.cpp:338
virtual ~ShaderProgram()
Definition aglShaderProgram.cpp:32
void destroyAttribute()
Definition aglShaderProgram.cpp:581
s32 getVariationMacroNum() const
Definition aglShaderProgram.cpp:296
void setResShaderVariationDefaultArray(const ResShaderVariationArray &array)
Definition aglShaderProgram.h:57
void updateAttributeLocation() const
Definition aglShaderProgram.cpp:356
u32 updateVariation(s32 index)
Definition aglShaderProgram.h:147
const UniformLocation & getUniformLocation(s32 index) const
Definition aglShaderProgram.h:155
const ResShaderSymbolArray & getResShaderSymbolArray(ShaderSymbolType type) const
Definition aglShaderProgram.h:47
ShaderProgram * getVariation(s32 index)
Definition aglShaderProgram.cpp:314
sead::Buffer< AttributeLocation > mAttributeLocation
Definition aglShaderProgram.h:276
void destroySamplerLocation()
Definition aglShaderProgram.cpp:617
s32 getVariationNum() const
Definition aglShaderProgram.cpp:287
u32 forceValidate_() const
Definition aglShaderProgram.cpp:456
void dump() const
Definition aglShaderProgram.cpp:380
u32 validate_() const
Definition aglShaderProgram.cpp:445
Definition aglShader.h:14
Definition aglShader.h:44
Definition seadBuffer.h:13
Definition seadNamable.h:9
const SafeString & getName() const
Definition seadNamable.h:26
Definition seadSafeArray.h:257
Definition aglDisplayList.cpp:5
ShaderType
Definition aglShaderEnum.h:10
ResArray< ResShaderVariation > ResShaderVariationArray
Definition aglResShaderVariation.h:31
ShaderMode
Definition aglShaderEnum.h:27
@ cShaderMode_Invalid
Definition aglShaderEnum.h:31
ShaderSymbolType
Definition aglShaderEnum.h:18
@ cShaderSymbolType_Num
Definition aglShaderEnum.h:23
Definition seadAssert.h:44
SafeStringBase< char > SafeString
Definition seadSafeString.h:409
BitFlag< u8 > BitFlag8
Definition seadBitFlag.h:123