NW4F Eft
Loading...
Searching...
No Matches
eft_Renderer.h
Go to the documentation of this file.
1#ifndef EFT_RENDERER_H_
2#define EFT_RENDERER_H_
3
4#include <nw/eft/eft_Emitter.h>
5#include <nw/eft/eft_TemporaryBuffer.h>
6
7#include <nw/eft/cafe/eft_CafeWrapper.h>
8
9namespace nw { namespace eft {
10
11class Config;
12class Heap;
13class ParticleShader;
14class Primitive;
16struct PtclInstance;
17struct PtclStripe;
19class System;
20struct ViewUniformBlock;
21
23{
24private:
31 static_assert(sizeof(sortPtcl) == 0xC, "nw::eft::Renderer::sortPtcl size mismatch");
32
33 static s32 ComparePtclViewZ(const void* a, const void* b);
34
35public:
36 Renderer(Heap* heap, System* system, const Config& config);
37 ~Renderer();
38
39 void BeginRender(const nw::math::MTX44& proj, const nw::math::MTX34& view, const nw::math::VEC3& camPos, f32 near, f32 far);
40 void EntryParticle(EmitterInstance* emitter, bool cacheFlush = true, void* userParam = NULL);
41
42 void EntryParticleFromCallback(const EmitterInstance* emitter, bool cacheFlush, void* userParam)
43 {
45 EntryChildParticleSub(emitter, cacheFlush, userParam);
46 else
47 EntryParticleSub(emitter, cacheFlush, userParam);
48 }
49
50 void EndRender();
51
52 void SetDepthTexture(Texture depthTexture, f32 offsetU = 0.0f, f32 offsetV = 0.0f, f32 scaleU = 1.0f, f32 scaleV = 1.0f)
53 {
55 mDepthTextureOffset.x = offsetU;
56 mDepthTextureOffset.y = offsetV;
57 mDepthTextureScale.x = scaleU;
58 mDepthTextureScale.y = scaleV;
59 }
60
61 void SetFrameBufferTexture( Texture frameBufferTexture, f32 offsetU = 0.0f, f32 offsetV = 0.0f, f32 scaleU = 1.0f, f32 scaleV = 1.0f )
62 {
64 mFrameBufferTextureOffset.x = offsetU;
65 mFrameBufferTextureOffset.y = offsetV;
66 mFrameBufferTextureScale.x = scaleU;
67 mFrameBufferTextureScale.y = scaleV;
68 }
69
71 {
73 }
74
75 void SwapDoubleBuffer();
76 void* AllocFromDoubleBuffer(u32 size);
77
79 {
80 return mTemporaryBuffer.GetSize();
81 }
82
84 {
85 return mTemporaryBuffer.GetUsedSize();
86 }
87
88 void FlushCache();
89
91 {
93 {
94 return emitter->childShader[mCurrentShaderType];
95 }
96 else
97 {
98 return emitter->shader[mCurrentShaderType];
99 }
100 }
101
103 {
105 {
106 const ComplexEmitterData* res = reinterpret_cast<const ComplexEmitterData*>(emitter->res);
107 const ChildData* cres = reinterpret_cast<const ChildData*>(res + 1);
108
109 return cres->childUserShaderSetting;
110 }
111 else
112 {
113 return emitter->res->userShaderSetting;
114 }
115 }
116
118 {
120 {
121 const ComplexEmitterData* res = reinterpret_cast<const ComplexEmitterData*>(emitter->res);
122 const ChildData* cres = reinterpret_cast<const ChildData*>(res + 1);
123
124 return cres->childUserShaderFlag;
125 }
126 else
127 {
128 return emitter->res->userShaderFlag;
129 }
130 }
131
133 {
135 {
136 const ComplexEmitterData* res = reinterpret_cast<const ComplexEmitterData*>(emitter->res);
137 const ChildData* cres = reinterpret_cast<const ChildData*>(res + 1);
138
139 return &cres->childUserShaderParam;
140 }
141 else
142 {
143 return &emitter->res->userShaderParam;
144 }
145 }
146
148 {
149 return emitter->res->userShaderParam.param[paramIdx];
150 }
151
153 {
154 const ComplexEmitterData* res = reinterpret_cast<const ComplexEmitterData*>(emitter->res);
155 const ChildData* cres = reinterpret_cast<const ChildData*>(res + 1);
156
157 return cres->childUserShaderParam.param[paramIdx];
158 }
159
160 f32 GetUserShaderParam(const EmitterInstance* emitter, u32 paramIdx)
161 {
163 {
164 const ComplexEmitterData* res = reinterpret_cast<const ComplexEmitterData*>(emitter->res);
165 const ChildData* cres = reinterpret_cast<const ChildData*>(res + 1);
166
167 return cres->childUserShaderParam.param[paramIdx];
168 }
169 else
170 {
171 return emitter->res->userShaderParam.param[paramIdx];
172 }
173 }
174
176 {
177 mDrawViewFlag = flag;
178 }
179
181 {
182 return mDrawViewFlag;
183 }
184
186 {
187 return mStripeVertexCalcNum;
188 }
189
190 const System* GetEffectSystem() const
191 {
192 return mSystem;
193 }
194
196 {
197 mCurrentShaderType = type;
198 }
199
202
204 {
205 return mCurrentPrimitive;
206 }
207
209 {
210 return mRenderContext;
211 }
212
214 {
215 return mCurrentDrawingType;
216 }
217
219 {
220 return mMatView;
221 }
222
224 {
225 return mMatViewProj;
226 }
227
228private:
229 void EntryParticleSub(const EmitterInstance* emitter, bool cacheFlush, void* userParam);
230 void EntryChildParticleSub(const EmitterInstance* emitter, bool cacheFlush, void* userParam);
231
232 void RequestParticle(const EmitterInstance* e,
233 ParticleShader* shader,
234 bool bChild,
235 bool cacheFlush,
236 void* userParam);
237
238 bool SetupParticleShaderAndVertex(ParticleShader* shader, MeshType meshType, Primitive* primitive);
239
240 void EntryStripe(EmitterInstance* emitter, bool cacheFlush, void* userParam);
241 void EntryConnectionStripe(EmitterInstance* emitter, bool cacheFlush, void* userParam);
242 bool SetupStripeDrawSetting(const EmitterInstance* emitter, bool cacheFlush, void* userParam);
243
244 s32 MakeStripeAttributeBlockCore(PtclStripe* __restrict stripe, StripeVertexBuffer* stripeVertex, s32 wroteVertexNum);
245 s32 MakeStripeAttributeBlockCoreDivide(PtclStripe* stripe, StripeVertexBuffer* stripeVertex, s32 wroteVertexNum, s32 numDivide);
246
247 s32 MakeConnectionStripeAttributeBlockCore(EmitterInstance* emitter, s32 numPtcl, PtclInstance* pTailPtcl, PtclInstance* pTail2ndPtcl, s32 tailType, StripeVertexBuffer* stripeVertex, s32 wroteVertexNum = 0);
248 s32 MakeConnectionStripeAttributeBlockCoreDivide(EmitterInstance* emitter, s32 numPtcl, PtclInstance* pTailPtcl, PtclInstance* pTail2ndPtcl, s32 tailType, StripeVertexBuffer* stripeVertex, s32 wroteVertexNum = 0);
249
250 bool ConnectionStripeUvScaleCalc(f32& frateScaleUv, f32& uvStartOfs, const EmitterInstance* emitter, s32 numLoop, f32 frateScale, s32 tailType);
251
252 static void GetPositionOnCubic(nw::math::VEC3* retPos,
253 const nw::math::VEC3& startPos,
254 const nw::math::VEC3& startVel,
255 const nw::math::VEC3& endPos,
256 const nw::math::VEC3& endVel,
257 float time);
258
259private:
260 void BindParticleAttributeBlock(PtclAttributeBuffer* ptclAttributeBuffer, ParticleShader* shader, u32 entryNum);
261
262private:
286};
287static_assert(sizeof(Renderer) == 0x17C, "nw::eft::Renderer size mismatch");
288
289} } // namespace nw::eft
290
291#endif // EFT_RENDERER_H_
Definition eft_Config.h:11
Definition eft_CafeWrapper.h:14
u32 PrimitiveType
Definition eft_CafeWrapper.h:16
Definition eft_Heap.h:9
Definition eft_Shader.h:410
Definition eft_Primitive.h:10
Definition eft_CafeWrapper.h:69
Definition eft_Renderer.h:23
Rendercontext mRenderContext
Definition eft_Renderer.h:265
nw::math::MTX44 GetViewMatrix() const
Definition eft_Renderer.h:218
s32 MakeStripeAttributeBlockCoreDivide(PtclStripe *stripe, StripeVertexBuffer *stripeVertex, s32 wroteVertexNum, s32 numDivide)
Definition eft_RendererStripe.cpp:156
nw::math::MTX44 mMatViewProj
Definition eft_Renderer.h:268
VertexBuffer mPositionVB
Definition eft_Renderer.h:272
void EndRender()
Definition eft_Renderer.cpp:466
nw::math::VEC3 mEyePos
Definition eft_Renderer.h:271
nw::math::VEC2 mDepthTextureOffset
Definition eft_Renderer.h:277
const nw::eft::UserShaderParam * GetUserShaderParam(const EmitterInstance *emitter)
Definition eft_Renderer.h:132
bool SetupParticleShaderAndVertex(ParticleShader *shader, MeshType meshType, Primitive *primitive)
Definition eft_Renderer.cpp:152
nw::math::MTX44 GetViewProjMatrix() const
Definition eft_Renderer.h:223
void SetShaderType(ShaderType type)
Definition eft_Renderer.h:195
nw::math::VEC2 mFrameBufferTextureScale
Definition eft_Renderer.h:280
u32 GetStripeVertexCalcNum() const
Definition eft_Renderer.h:185
Renderer(Heap *heap, System *system, const Config &config)
Definition eft_Renderer.cpp:34
nw::math::VEC2 mDepthTextureScale
Definition eft_Renderer.h:278
ParticleShader * GetShader(const EmitterInstance *emitter)
Definition eft_Renderer.h:90
static s32 ComparePtclViewZ(const void *a, const void *b)
Definition eft_Renderer.cpp:15
VertexBuffer mIndexVB
Definition eft_Renderer.h:273
u8 GetUserShaderSetting(const EmitterInstance *emitter)
Definition eft_Renderer.h:102
u32 GetDoubleBufferSize() const
Definition eft_Renderer.h:78
bool MakeStripeAttributeBlock(EmitterInstance *emitter)
Definition eft_RendererStripe.cpp:349
nw::math::VEC3 mEyeVec
Definition eft_Renderer.h:270
void BeginRender(const nw::math::MTX44 &proj, const nw::math::MTX34 &view, const nw::math::VEC3 &camPos, f32 near, f32 far)
Definition eft_Renderer.cpp:95
void EntryChildParticleSub(const EmitterInstance *emitter, bool cacheFlush, void *userParam)
Definition eft_Renderer.cpp:324
void BindParticleAttributeBlock(PtclAttributeBuffer *ptclAttributeBuffer, ParticleShader *shader, u32 entryNum)
Definition eft_RenderBlock.cpp:6
~Renderer()
Definition eft_Renderer.cpp:87
s32 MakeConnectionStripeAttributeBlockCore(EmitterInstance *emitter, s32 numPtcl, PtclInstance *pTailPtcl, PtclInstance *pTail2ndPtcl, s32 tailType, StripeVertexBuffer *stripeVertex, s32 wroteVertexNum=0)
Definition eft_RendererStripe.cpp:473
DrawViewFlag GetDrawViewFlag() const
Definition eft_Renderer.h:180
Draw::PrimitiveType mDrawPrimitiveType
Definition eft_Renderer.h:266
Primitive * GetCurrentPrimitive() const
Definition eft_Renderer.h:203
u32 mStripeVertexCalcNum
Definition eft_Renderer.h:282
void * AllocFromDoubleBuffer(u32 size)
Definition eft_RendererEtc.cpp:12
void SetDepthTexture(Texture depthTexture, f32 offsetU=0.0f, f32 offsetV=0.0f, f32 scaleU=1.0f, f32 scaleV=1.0f)
Definition eft_Renderer.h:52
nw::math::MTX44 mMatBillboard
Definition eft_Renderer.h:269
u32 GetUserShaderFlag(const EmitterInstance *emitter)
Definition eft_Renderer.h:117
StripeVertexBuffer * MakeConnectionStripeAttributeBlock(EmitterInstance *emitter, bool cacheFlush)
Definition eft_RendererStripe.cpp:997
void EntryParticleSub(const EmitterInstance *emitter, bool cacheFlush, void *userParam)
Definition eft_Renderer.cpp:343
nw::math::VEC2 mFrameBufferTextureOffset
Definition eft_Renderer.h:279
f32 GetParentParticleUserShaderParam(const EmitterInstance *emitter, u32 paramIdx)
Definition eft_Renderer.h:147
void SetFrameBufferTexture(Texture frameBufferTexture, f32 offsetU=0.0f, f32 offsetV=0.0f, f32 scaleU=1.0f, f32 scaleV=1.0f)
Definition eft_Renderer.h:61
System * mSystem
Definition eft_Renderer.h:263
void SetTextureSlot(TextureSlot slot, Texture texture)
Definition eft_Renderer.h:70
PtclType mCurrentDrawingType
Definition eft_Renderer.h:283
DrawViewFlag mDrawViewFlag
Definition eft_Renderer.h:285
const System * GetEffectSystem() const
Definition eft_Renderer.h:190
void FlushCache()
Definition eft_RendererEtc.cpp:20
ViewUniformBlock * mViewUniformBlock
Definition eft_Renderer.h:275
PtclType GetPtclType() const
Definition eft_Renderer.h:213
ShaderType mCurrentShaderType
Definition eft_Renderer.h:284
s32 MakeStripeAttributeBlockCore(PtclStripe *__restrict stripe, StripeVertexBuffer *stripeVertex, s32 wroteVertexNum)
Definition eft_RendererStripe.cpp:13
void RequestParticle(const EmitterInstance *e, ParticleShader *shader, bool bChild, bool cacheFlush, void *userParam)
Definition eft_Renderer.cpp:188
void EntryParticleFromCallback(const EmitterInstance *emitter, bool cacheFlush, void *userParam)
Definition eft_Renderer.h:42
void EntryParticle(EmitterInstance *emitter, bool cacheFlush=true, void *userParam=NULL)
Definition eft_Renderer.cpp:362
void EntryStripe(EmitterInstance *emitter, bool cacheFlush, void *userParam)
Definition eft_RendererStripe.cpp:1231
Primitive * mCurrentPrimitive
Definition eft_Renderer.h:274
Rendercontext & GetRenderContext()
Definition eft_Renderer.h:208
f32 GetUserShaderParam(const EmitterInstance *emitter, u32 paramIdx)
Definition eft_Renderer.h:160
void SwapDoubleBuffer()
Definition eft_RendererEtc.cpp:6
bool ConnectionStripeUvScaleCalc(f32 &frateScaleUv, f32 &uvStartOfs, const EmitterInstance *emitter, s32 numLoop, f32 frateScale, s32 tailType)
Definition eft_RendererStripe.cpp:431
void SetDrawViewFlag(DrawViewFlag flag)
Definition eft_Renderer.h:175
u32 GetUsedDoubleBufferSize() const
Definition eft_Renderer.h:83
TemporaryBuffer mTemporaryBuffer
Definition eft_Renderer.h:281
Texture mExtensionTexture[EFT_TEXTURE_SLOT_MAX - EFT_TEXTURE_SLOT_BIN_MAX]
Definition eft_Renderer.h:276
static void GetPositionOnCubic(nw::math::VEC3 *retPos, const nw::math::VEC3 &startPos, const nw::math::VEC3 &startVel, const nw::math::VEC3 &endPos, const nw::math::VEC3 &endVel, float time)
Definition eft_RendererStripe.cpp:130
Heap * mHeap
Definition eft_Renderer.h:264
bool SetupStripeDrawSetting(const EmitterInstance *emitter, bool cacheFlush, void *userParam)
Definition eft_RendererStripe.cpp:1049
nw::math::MTX44 mMatView
Definition eft_Renderer.h:267
f32 GetChildParticleUserShaderParam(const EmitterInstance *emitter, u32 paramIdx)
Definition eft_Renderer.h:152
void EntryConnectionStripe(EmitterInstance *emitter, bool cacheFlush, void *userParam)
Definition eft_RendererStripe.cpp:1114
s32 MakeConnectionStripeAttributeBlockCoreDivide(EmitterInstance *emitter, s32 numPtcl, PtclInstance *pTailPtcl, PtclInstance *pTail2ndPtcl, s32 tailType, StripeVertexBuffer *stripeVertex, s32 wroteVertexNum=0)
Definition eft_RendererStripe.cpp:692
Definition eft_System.h:24
Definition eft_CafeWrapper.h:92
Definition eft_CafeWrapper.cpp:117
PtclType
Definition eft_Data.h:43
@ EFT_PTCL_TYPE_CHILD
Definition eft_Data.h:46
const GX2Texture * Texture
Definition eft_CafeWrapper.h:65
TextureSlot
Definition eft_Data.h:145
@ EFT_TEXTURE_SLOT_MAX
Definition eft_Data.h:151
@ EFT_TEXTURE_SLOT_BIN_MAX
Definition eft_Data.h:148
@ EFT_TEXTURE_SLOT_DEPTH_BUFFER
Definition eft_Data.h:149
@ EFT_TEXTURE_SLOT_FRAME_BUFFER
Definition eft_Data.h:150
ShaderType
Definition eft_Data.h:310
MeshType
Definition eft_Data.h:356
DrawViewFlag
Definition eft_Data.h:179
Definition eft_Data.h:1024
Definition eft_Data.h:1006
Definition eft_Emitter.h:23
ParticleShader * shader[EFT_SHADER_TYPE_MAX]
Definition eft_Emitter.h:56
ParticleShader * childShader[EFT_SHADER_TYPE_MAX]
Definition eft_Emitter.h:57
const SimpleEmitterData * res
Definition eft_Emitter.h:51
Definition eft_Data.h:656
Definition eft_Particle.h:69
Definition eft_Particle.h:28
Definition eft_Renderer.h:26
PtclInstance * ptcl
Definition eft_Renderer.h:27
u32 index
Definition eft_Renderer.h:29
f32 z
Definition eft_Renderer.h:28
Definition eft_UniformBlock.h:38
Definition eft_TemporaryBuffer.h:10
Definition eft_Data.h:737
Definition eft_UniformBlock.h:9