sead
Loading...
Searching...
No Matches
aglShaderProgramArchive.h
Go to the documentation of this file.
1#pragma once
2
3#include <common/aglResShaderArchive.h>
4#include <common/aglResShaderSource.h>
5#include <common/aglShaderCompileInfo.h>
6#include <common/aglShaderProgram.h>
7#include <container/seadBuffer.h>
8#include <container/seadSafeArray.h>
9#include <heap/seadDisposer.h>
10#include <hostio/seadHostIODummy.h>
11#include <prim/seadBitFlag.h>
12#include <prim/seadSafeString.h>
13
14namespace agl {
15
17{
18 class ShaderProgramEx;
19 class ShaderSource;
20
22 {
23 public:
28
29 private:
32
34 };
35 static_assert(sizeof(ShaderCompileInfoEx) == 0x58, "agl::ShaderProgramArchive::ShaderCompileInfoEx size mismatch");
36
38 {
39 public:
41 virtual ~ShaderProgramEx();
42
43 void initialize(ShaderProgramArchive* archive, s32 index, ResShaderProgram res, sead::Heap* heap);
44 void updateRawText();
45 void updateAnalyze();
46
47 private:
51 sead::Buffer<u32> _110; // No idea buffer of what
54
56 };
57 static_assert(sizeof(ShaderProgramEx) == 0x124, "agl::ShaderProgramArchive::ShaderProgramEx size mismatch");
58
59 class ShaderSource : public sead::IDisposer, public sead::hostio::Node
60 {
61 public:
63 virtual ~ShaderSource();
64
65 void initialize(ShaderProgramArchive* archive, s32 index, ResShaderSource res, bool is_used, sead::Heap* heap);
66 void expand();
67
68 const char* getName() const
69 {
70 return mRes.getName();
71 }
72
73 private:
81
83 };
84 static_assert(sizeof(ShaderSource) == 0x30, "agl::ShaderProgramArchive::ShaderSource size mismatch");
85
86public:
88 virtual ~ShaderProgramArchive();
89
90 void destroy();
91
92 bool isValid() const
93 {
94 return mResBinary.isValid() || mResText.isValid();
95 }
96
98 {
99 if (mResBinary.isValid())
100 return mResBinary.getName();
101 else
102 return mResText.getName();
103 }
104
106 {
107 return mProgram.size();
108 }
109
111 {
112 return mProgram[idx];
113 }
114
115 const ShaderProgram& getShaderProgram(s32 idx) const
116 {
117 return mProgram[idx];
118 }
119
120 void createWithOption(ResBinaryShaderArchive res_binary_archive, ResShaderArchive res_archive, u32 flag, sead::Heap* heap);
121 bool setUp();
122
123 s32 searchShaderProgramIndex(const sead::SafeString& name) const;
124
126 {
127 s32 index = searchShaderProgramIndex(name);
128 if (index >= 0 && index < mProgram.size())
129 return mProgram.unsafeGet(index);
130
131 return nullptr;
132 }
133
134 const ShaderProgram* searchShaderProgram(s32 index) const
135 {
136 return mProgram.get(index);
137 }
138
139 void updateCompileInfo();
140
141private:
142 void destroyResFile_();
143 void setResShaderArchive_(ResShaderArchive res_archive, sead::Heap* heap);
144 bool setUp_(bool);
145
146private:
156 sead::Buffer<const char*> mSourceText;
157 sead::Buffer<const char*> mSourceName;
158
159 friend class ShaderSource;
160 friend class ShaderProgramEx;
161};
162static_assert(sizeof(ShaderProgramArchive) == 0x4C, "agl::ShaderProgramArchive size mismatch");
163
164}
Definition aglResShaderArchive.h:105
Definition aglResShaderArchive.h:39
Definition aglResShaderProgram.h:19
Definition aglResShaderSource.h:21
Definition aglShaderCompileInfo.h:13
Definition aglShaderProgramArchive.h:22
ShaderCompileInfoEx()
Definition aglShaderProgramArchive.h:24
ShaderSource * mSource
Definition aglShaderProgramArchive.h:31
ShaderCompileInfo mCompileInfo
Definition aglShaderProgramArchive.h:30
Definition aglShaderProgramArchive.h:38
ShaderProgramArchive * mpArchive
Definition aglShaderProgramArchive.h:49
void updateAnalyze()
Definition aglShaderProgramArchive.cpp:436
sead::Buffer< u32 > _110
Definition aglShaderProgramArchive.h:51
virtual ~ShaderProgramEx()
Definition aglShaderProgramArchive.cpp:374
sead::UnsafeArray< ShaderCompileInfoEx, cShaderType_Num > mCompileInfoEx
Definition aglShaderProgramArchive.h:50
ShaderProgramEx()
Definition aglShaderProgramArchive.cpp:366
void initialize(ShaderProgramArchive *archive, s32 index, ResShaderProgram res, sead::Heap *heap)
Definition aglShaderProgramArchive.cpp:378
sead::BitFlag8 mFlag
Definition aglShaderProgramArchive.h:53
void updateRawText()
Definition aglShaderProgramArchive.cpp:423
s32 mIndex
Definition aglShaderProgramArchive.h:48
s32 mVariationIndex
Definition aglShaderProgramArchive.h:52
Definition aglShaderProgramArchive.h:60
s32 mIndex
Definition aglShaderProgramArchive.h:74
ResShaderSource mRes
Definition aglShaderProgramArchive.h:77
virtual ~ShaderSource()
Definition aglShaderProgramArchive.cpp:453
sead::BitFlag32 mFlag
Definition aglShaderProgramArchive.h:75
const char * getName() const
Definition aglShaderProgramArchive.h:68
sead::HeapSafeString * mText
Definition aglShaderProgramArchive.h:78
sead::Buffer< bool > mUsedInSource
Definition aglShaderProgramArchive.h:80
void initialize(ShaderProgramArchive *archive, s32 index, ResShaderSource res, bool is_used, sead::Heap *heap)
Definition aglShaderProgramArchive.cpp:460
ShaderSource()
Definition aglShaderProgramArchive.cpp:442
void expand()
Definition aglShaderProgramArchive.cpp:480
ShaderProgramArchive * mpArchive
Definition aglShaderProgramArchive.h:76
sead::HeapSafeString * mRawText
Definition aglShaderProgramArchive.h:79
Definition aglShaderProgramArchive.h:17
const ShaderProgram & getShaderProgram(s32 idx) const
Definition aglShaderProgramArchive.h:115
sead::Buffer< const char * > mSourceName
Definition aglShaderProgramArchive.h:157
ShaderProgram & getShaderProgram(s32 idx)
Definition aglShaderProgramArchive.h:110
void updateCompileInfo()
Definition aglShaderProgramArchive.cpp:228
void destroy()
Definition aglShaderProgramArchive.cpp:91
sead::Buffer< ShaderProgram > mProgram
Definition aglShaderProgramArchive.h:149
sead::Buffer< ShaderSource > mSource
Definition aglShaderProgramArchive.h:155
ShaderProgramArchive()
Definition aglShaderProgramArchive.cpp:69
ResBinaryShaderArchive mResBinary
Definition aglShaderProgramArchive.h:147
sead::Buffer< const char * > mSourceText
Definition aglShaderProgramArchive.h:156
const ShaderProgram * searchShaderProgram(const sead::SafeString &name) const
Definition aglShaderProgramArchive.h:125
const ShaderProgram * searchShaderProgram(s32 index) const
Definition aglShaderProgramArchive.h:134
bool setUp()
Definition aglShaderProgramArchive.cpp:213
sead::BitFlag16 mFlag
Definition aglShaderProgramArchive.h:153
sead::Buffer< ShaderProgramEx > mProgramEx
Definition aglShaderProgramArchive.h:154
s32 searchShaderProgramIndex(const sead::SafeString &name) const
Definition aglShaderProgramArchive.cpp:219
u32 _20
Definition aglShaderProgramArchive.h:150
s32 getShaderProgramNum() const
Definition aglShaderProgramArchive.h:105
u32 _24
Definition aglShaderProgramArchive.h:151
u16 _28
Definition aglShaderProgramArchive.h:152
void setResShaderArchive_(ResShaderArchive res_archive, sead::Heap *heap)
Definition aglShaderProgramArchive.cpp:243
void createWithOption(ResBinaryShaderArchive res_binary_archive, ResShaderArchive res_archive, u32 flag, sead::Heap *heap)
Definition aglShaderProgramArchive.cpp:111
bool isValid() const
Definition aglShaderProgramArchive.h:92
void destroyResFile_()
Definition aglShaderProgramArchive.cpp:99
virtual ~ShaderProgramArchive()
Definition aglShaderProgramArchive.cpp:86
sead::SafeString getName() const
Definition aglShaderProgramArchive.h:97
bool setUp_(bool)
Definition aglShaderProgramArchive.cpp:340
ResShaderArchive mResText
Definition aglShaderProgramArchive.h:148
Definition aglShaderProgram.h:16
Definition seadBuffer.h:13
Definition seadHeap.h:23
Definition seadDisposer.h:12
Definition seadSafeArray.h:257
Definition seadHostIODummy.h:25
Definition aglDisplayList.cpp:5
@ cShaderType_Num
Definition aglShaderEnum.h:14
Definition seadHeap.h:14
Definition seadAssert.h:44
HeapSafeStringBase< char > HeapSafeString
Definition seadSafeString.h:540
BitFlag< u16 > BitFlag16
Definition seadBitFlag.h:124
BitFlag< u32 > BitFlag32
Definition seadBitFlag.h:125
SafeStringBase< char > SafeString
Definition seadSafeString.h:409
BitFlag< u8 > BitFlag8
Definition seadBitFlag.h:123