sead
Loading...
Searching...
No Matches
aglLightMap.h
Go to the documentation of this file.
1#pragma once
2
3#include <common/aglRenderBuffer.h>
4#include <common/aglRenderTarget.h>
5#include <common/aglTextureSampler.h>
6#include <common/aglUniformBlock.h>
7#include <environment/aglEnvObjSet.h>
8#include <gfx/seadGraphicsContextMRT.h>
9#include <basis/seadAssert.h>
10
11namespace agl { namespace lght {
12
13class LightMapMgr;
14
15class LightMap : public env::EnvObjSet
16{
17
18public:
19 static const s32 cLightMapMax = 256;
20 static const s32 cLightObjMax = 8;
21 static const s32 cMipMax = 3;
22 static const s32 cBoolMax = 2;
23 static const s32 cLightingHintMax = 3;
24
32 static_assert(cMappingType_Num == 3);
33
35 {
38 cSliceNum_Cube = 6, // A cube map has 6 slices
39
40 cSliceNum_Max = 6 // max(cSliceNum_Sphere, cSliceNum_SphereBackside, cSliceNum_Cube)
41 };
42
50 static_assert(cUniformBlockID_Num == 3);
51
58 static_assert(cSampler_Num == 2);
59
61 {
62 cLightMemberIndex_RimPow = 0, // float cRimPow;
63 cLightMemberIndex_RimWidth, // float cRimWidth;
64 cLightMemberIndex_ParamLight, // float cParamLight[cLightObjMax];
66 };
67 static_assert(cLightMemberNum == 3);
68
70 {
71 cLightViewMemberIndex_RimColor = 0, // vec4 cRimColor;
72 cLightViewMemberIndex_LightDir, // vec4 cLightDir[cLightObjMax];
74 };
75 static_assert(cLightViewMemberNum == 2);
76
78 {
79 cLightMipMemberIndex_SpecPow = 0, // float cSpecPow[cLightObjMax];
80 cLightMipMemberIndex_ParamLightMip, // vec4 cParamLightMip[cLightObjMax * 2];
82 };
83 static_assert(cLightMipMemberNum == 2);
84
85private:
91 static_assert(sizeof(Context) == 0x848);
92
98 static_assert(sizeof(ViewInfo) == 0x18EC);
99
117 static_assert(sizeof(LightObj) == 0x58);
118
130 static_assert(sizeof(EnvObjEx) == 0xB8);
131
132 typedef sead::UnsafeArray<
136 >,
139 static_assert(sizeof(GraphicsContext) == 0x6A8);
140
147 static_assert(sizeof(DrawArg) == 0x14);
148
149 struct ArrayNode : public sead::hostio::Node
150 {
151 };
152
153public:
154 LightMap();
155 virtual ~LightMap();
156
157private:
158 void initialize_(const LightMapMgr* p_mgr, const env::EnvObjBuffer::AllocateArg& alloc_arg, s32 view_max, sead::Heap* heap);
159 void update_();
160 void updateGPU_(bool invalidate_gpu) const;
161 void updateViewGPU_(s32 view_index, const sead::Matrix34f& view_mtx, bool invalidate_gpu) const;
162 ShaderMode draw_(s32 view_index, const DrawArg& arg, ShaderMode mode) const;
163
164 void bindLUT_(s32 obj_index);
165 void bindLUT_();
166
167 void initializeRenderBuffer_(s32 view_index, u32 mip_level);
168 void initializeTexture_(u32 size_sphere, u32 size_cube);
169 void constructMemory_(sead::Heap* heap);
170
171protected:
172 virtual bool preRead_();
173 virtual void postRead_();
174
175public:
176 virtual void genMessageEachObj(sead::hostio::Context*, s32, const env::EnvObj*);
177
178protected:
179 virtual bool preWrite_() const;
180 virtual void callbackNotAppliable_(utl::IParameterObj* p_param_obj, utl::ResParameter res_param);
181
182public:
183 s32 applyEnvObjData(const env::EnvObj* p_obj, const EnvObjEx* p_ex, s32 light_index);
184
185public:
186 TextureSampler& getTextureSampler() { return mTextureSampler; }
187 const TextureSampler& getTextureSampler() const { return mTextureSampler; }
188
189 void setCalcType(s32 light_index, s32 calc_type)
190 {
191 if (mLightObj[light_index].mCalcType == calc_type)
192 return;
193
194 mFlag.setBit(4);
195 mLightObj[light_index].mCalcType = calc_type;
196 }
197
198 void setPow(s32 light_index, f32 pow)
199 {
200 if (mLightObj[light_index].mPow == pow)
201 return;
202
203 mFlag.setBit(4);
204 mLightObj[light_index].mPow = pow;
205 }
206
207 void setPowMipMax(s32 light_index, f32 pow_mip_max)
208 {
209 if (mLightObj[light_index].mPowMipMax == pow_mip_max)
210 return;
211
212 mFlag.setBit(4);
213 mLightObj[light_index].mPowMipMax = pow_mip_max;
214 }
215
216 void setColorMinMax(s32 light_index, const sead::Color4f& min, const sead::Color4f& max)
217 {
218 if (mLightObj[light_index].mLightColorMinMax[0] == min && mLightObj[light_index].mLightColorMinMax[1] == max)
219 return;
220
221 mFlag.setBit(4);
222 mLightObj[light_index].mLightColorMinMax[0] = min;
223 mLightObj[light_index].mLightColorMinMax[1] = max;
224 }
225
226 void setDirection(s32 light_index, const sead::Vector3f& direction)
227 {
228 if (mLightObj[light_index].mDirection == direction)
229 return;
230
231 mFlag.setBit(4);
232 mLightObj[light_index].mDirection = direction;
233 }
234
235 void setLUTType(s32 light_index, s32 lut_type)
236 {
237 if (mLightObj[light_index].mLUTType == lut_type)
238 return;
239
240 mFlag.setBit(4);
241 mLightObj[light_index].mLUTType = lut_type;
242 mFlag.setBit(4); // Nintendo: gotta set it twice to make sure
243 }
244
246 {
247 if (mpParent == nullptr)
248 return MappingType(*mMappingType);
249
251 }
252
254 {
255 if (mpParent == nullptr)
256 return *mLightingHint;
257
258 return mpParent->getLightingHint();
259 }
260
261 void setLightingHint(s32 value)
262 {
263 *mLightingHint = value;
264 mFlag.setBit(2);
265 }
266
268 {
269 return mChild.size();
270 }
271
272 LightMap* get(s32 array_index)
273 {
274 SEAD_ASSERT(0 == array_index || array_index <= getChildNum());
275 return array_index == 0 ? this : mChild[array_index - 1];
276 }
277
278 const LightMap* get(s32 array_index) const
279 {
280 SEAD_ASSERT(0 == array_index || array_index <= getChildNum());
281 return array_index == 0 ? this : mChild[array_index - 1];
282 }
283
284private:
291 s8 mChildIndex; // -1 = Independent (neither a parent nor a child), 0 = Root (i.e. a parent), 1+: Index in parent's child list + 1
314
315 friend class LightMapMgr;
316};
317static_assert(sizeof(LightMap) == 0x8AC, "agl::lght::LightMap size mismatch");
318
319} }
Definition aglRenderBuffer.h:15
Definition aglRenderTarget.h:66
Definition aglTextureData.h:11
Definition aglTextureSampler.h:12
Definition aglUniformBlock.h:10
Definition aglEnvObjBuffer.h:13
Definition aglEnvObjBuffer.h:10
Definition aglEnvObjSet.h:14
Definition aglEnvObj.h:20
Definition aglEnvObj.h:17
Definition aglLightMapMgr.h:18
Definition aglLightMap.h:101
sead::Color4f mLightColorMinMaxWithEffect[2]
Definition aglLightMap.h:110
sead::BitFlag8 mFlag
Definition aglLightMap.h:108
s8 mLUTType
Definition aglLightMap.h:107
f32 mPowMipMax
Definition aglLightMap.h:113
sead::Color4f mLightColorMinMax[2]
Definition aglLightMap.h:109
u8 mCalcType
Definition aglLightMap.h:106
sead::Vector3f mDirection
Definition aglLightMap.h:111
LightObj()
Definition aglLightMap.cpp:861
f32 mPow
Definition aglLightMap.h:112
Definition aglLightMap.h:16
void initialize_(const LightMapMgr *p_mgr, const env::EnvObjBuffer::AllocateArg &alloc_arg, s32 view_max, sead::Heap *heap)
Definition aglLightMap.cpp:39
virtual bool preWrite_() const
Definition aglLightMap.cpp:739
ArrayNode mArrayNode
Definition aglLightMap.h:302
static const s32 cLightObjMax
Definition aglLightMap.h:20
static const s32 cLightMapMax
Definition aglLightMap.h:19
utl::Parameter< f32 > mRimAngle
Definition aglLightMap.h:309
sead::Buffer< UniformBlock > mMipUniformBlock
Definition aglLightMap.h:300
LightViewMemberIndex
Definition aglLightMap.h:70
@ cLightViewMemberIndex_RimColor
Definition aglLightMap.h:71
@ cLightViewMemberNum
Definition aglLightMap.h:73
@ cLightViewMemberIndex_LightDir
Definition aglLightMap.h:72
virtual bool preRead_()
Definition aglLightMap.cpp:703
utl::Parameter< f32 > mRimWidth
Definition aglLightMap.h:307
LightMemberIndex
Definition aglLightMap.h:61
@ cLightMemberIndex_RimPow
Definition aglLightMap.h:62
@ cLightMemberIndex_RimWidth
Definition aglLightMap.h:63
@ cLightMemberIndex_ParamLight
Definition aglLightMap.h:64
@ cLightMemberNum
Definition aglLightMap.h:65
s32 getLightingHint() const
Definition aglLightMap.h:253
virtual void postRead_()
Definition aglLightMap.cpp:727
TextureSampler & getTextureSampler()
Definition aglLightMap.h:186
void setDirection(s32 light_index, const sead::Vector3f &direction)
Definition aglLightMap.h:226
static const s32 cLightingHintMax
Definition aglLightMap.h:23
s8 mCopyIndex
Definition aglLightMap.h:294
sead::Color4f mLightColor
Definition aglLightMap.h:297
s8 mChildIndex
Definition aglLightMap.h:291
void setLUTType(s32 light_index, s32 lut_type)
Definition aglLightMap.h:235
virtual ~LightMap()
Definition aglLightMap.cpp:32
utl::Parameter< f32 > mRimEffect
Definition aglLightMap.h:306
s8 mParentIndex
Definition aglLightMap.h:293
sead::Buffer< ViewInfo > mViewInfo
Definition aglLightMap.h:287
utl::Parameter< bool > mRimEnable
Definition aglLightMap.h:305
static const s32 cMipMax
Definition aglLightMap.h:21
void updateViewGPU_(s32 view_index, const sead::Matrix34f &view_mtx, bool invalidate_gpu) const
Definition aglLightMap.cpp:385
sead::UnsafeArray< sead::UnsafeArray< sead::GraphicsContextMRT, cBoolMax >, cMappingType_Num > GraphicsContext
Definition aglLightMap.h:138
utl::Parameter< sead::FixedSafeString< 32 > > mCopyMap
Definition aglLightMap.h:313
void setCalcType(s32 light_index, s32 calc_type)
Definition aglLightMap.h:189
sead::BitFlag8 mFlag
Definition aglLightMap.h:290
TextureData mTextureData
Definition aglLightMap.h:289
s32 applyEnvObjData(const env::EnvObj *p_obj, const EnvObjEx *p_ex, s32 light_index)
Definition aglLightMap.cpp:780
UniformBlock mUniformBlock
Definition aglLightMap.h:299
ShaderMode draw_(s32 view_index, const DrawArg &arg, ShaderMode mode) const
Definition aglLightMap.cpp:468
void update_()
Definition aglLightMap.cpp:142
sead::Buffer< EnvObjEx > mEnvObjEx
Definition aglLightMap.h:298
sead::Vector3f mDirection
Definition aglLightMap.h:296
LightMap * get(s32 array_index)
Definition aglLightMap.h:272
void updateGPU_(bool invalidate_gpu) const
Definition aglLightMap.cpp:251
void setColorMinMax(s32 light_index, const sead::Color4f &min, const sead::Color4f &max)
Definition aglLightMap.h:216
utl::Parameter< bool > mHdrEnable
Definition aglLightMap.h:304
const LightMapMgr * mpLightMapMgr
Definition aglLightMap.h:285
s32 getChildNum() const
Definition aglLightMap.h:267
virtual void callbackNotAppliable_(utl::IParameterObj *p_param_obj, utl::ResParameter res_param)
Definition aglLightMap.cpp:756
void setLightingHint(s32 value)
Definition aglLightMap.h:261
static const s32 cBoolMax
Definition aglLightMap.h:22
u8 mLightObjNum
Definition aglLightMap.h:292
LightMipMemberIndex
Definition aglLightMap.h:78
@ cLightMipMemberIndex_SpecPow
Definition aglLightMap.h:79
@ cLightMipMemberIndex_ParamLightMip
Definition aglLightMap.h:80
@ cLightMipMemberNum
Definition aglLightMap.h:81
utl::Parameter< s32 > mMappingType
Definition aglLightMap.h:311
env::EnvObj::Index mRimLightRef
Definition aglLightMap.h:310
void setPowMipMax(s32 light_index, f32 pow_mip_max)
Definition aglLightMap.h:207
utl::Parameter< s32 > mLightingHint
Definition aglLightMap.h:303
MappingType getMappingType() const
Definition aglLightMap.h:245
utl::Parameter< sead::FixedSafeString< 32 > > mParentMap
Definition aglLightMap.h:312
LightMap * mpParent
Definition aglLightMap.h:286
void bindLUT_(s32 obj_index)
Definition aglLightMap.cpp:525
const TextureSampler & getTextureSampler() const
Definition aglLightMap.h:187
utl::Parameter< f32 > mRimPow
Definition aglLightMap.h:308
void bindLUT_()
Definition aglLightMap.cpp:538
sead::PtrArray< LightMap > mChild
Definition aglLightMap.h:301
const LightMap * get(s32 array_index) const
Definition aglLightMap.h:278
UniformBlockID
Definition aglLightMap.h:44
@ cUniformBlockID_Light
Definition aglLightMap.h:45
@ cUniformBlockID_LightView
Definition aglLightMap.h:46
@ cUniformBlockID_LightMip
Definition aglLightMap.h:47
@ cUniformBlockID_Num
Definition aglLightMap.h:48
TextureSampler mTextureSampler
Definition aglLightMap.h:288
LightMap()
Definition aglLightMap.cpp:14
sead::UnsafeArray< LightObj, cLightObjMax > mLightObj
Definition aglLightMap.h:295
Sampler
Definition aglLightMap.h:53
@ cSampler_Num
Definition aglLightMap.h:56
@ cSampler_LUT
Definition aglLightMap.h:54
@ cSampler_Normal
Definition aglLightMap.h:55
SliceNum
Definition aglLightMap.h:35
@ cSliceNum_SphereBackside
Definition aglLightMap.h:37
@ cSliceNum_Sphere
Definition aglLightMap.h:36
@ cSliceNum_Max
Definition aglLightMap.h:40
@ cSliceNum_Cube
Definition aglLightMap.h:38
void setPow(s32 light_index, f32 pow)
Definition aglLightMap.h:198
void constructMemory_(sead::Heap *heap)
Definition aglLightMap.cpp:622
void initializeTexture_(u32 size_sphere, u32 size_cube)
Definition aglLightMap.cpp:579
MappingType
Definition aglLightMap.h:26
@ cMappingType_Cube
Definition aglLightMap.h:29
@ cMappingType_Sphere
Definition aglLightMap.h:27
@ cMappingType_Num
Definition aglLightMap.h:30
@ cMappingType_SphereBackside
Definition aglLightMap.h:28
virtual void genMessageEachObj(sead::hostio::Context *, s32, const env::EnvObj *)
Definition aglLightMap.cpp:734
void initializeRenderBuffer_(s32 view_index, u32 mip_level)
Definition aglLightMap.cpp:550
Definition aglParameterObj.h:13
Definition aglParameter.h:107
Definition aglResParameter.h:16
Definition seadBuffer.h:13
Definition seadSafeString.h:421
Definition seadHeap.h:23
Definition seadPtrArray.h:111
Definition seadSafeArray.h:19
Definition seadSafeArray.h:257
Definition seadHostIODummy.h:29
Definition seadHostIODummy.h:25
Definition aglEnvObj.cpp:21
Definition aglLightMap.h:11
Definition aglImageFilter2D.h:11
Definition aglDisplayList.cpp:5
ShaderMode
Definition aglShaderEnum.h:27
Definition seadHeap.h:14
Definition seadAssert.h:44
Vector3< f32 > Vector3f
Definition seadVector.h:239
Matrix34< f32 > Matrix34f
Definition seadMatrix.h:342
BitFlag< u8 > BitFlag8
Definition seadBitFlag.h:123
#define SEAD_ASSERT(condition)
Definition seadAssert.h:24
Definition aglLightMap.h:150
Definition aglLightMap.h:87
RenderBuffer mRenderBuffer
Definition aglLightMap.h:88
sead::SafeArray< RenderTargetColor, cSliceNum_Max > mColorTarget
Definition aglLightMap.h:89
Definition aglLightMap.h:142
const GraphicsContext * mpGraphicsContext
Definition aglLightMap.h:143
sead::UnsafeArray< const TextureSampler *, cMappingType_Num > mNormalMap
Definition aglLightMap.h:144
const TextureSampler * mpLUT
Definition aglLightMap.h:145
Definition aglLightMap.h:120
utl::Parameter< bool > mEnableMip1
Definition aglLightMap.h:128
s8 mLUTType
Definition aglLightMap.h:126
utl::Parameter< sead::FixedSafeString< 32 > > mLUTName
Definition aglLightMap.h:125
utl::Parameter< f32 > mPow
Definition aglLightMap.h:123
utl::Parameter< s32 > mCalcType
Definition aglLightMap.h:121
utl::Parameter< bool > mEnableMip0
Definition aglLightMap.h:127
utl::Parameter< f32 > mPowMipMax
Definition aglLightMap.h:124
utl::Parameter< f32 > mEffect
Definition aglLightMap.h:122
Definition aglLightMap.h:94
Context mContext[cMipMax]
Definition aglLightMap.h:96
UniformBlock mUniformBlock
Definition aglLightMap.h:95
Definition seadColor.h:9