MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / LazyInit

Method LazyInit

Source/Engine/Renderer/ProbesRenderer.cpp:208–270  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

206}
207
208bool ProbesRendererService::LazyInit()
209{
210 if (_initDone || _initFailed)
211 return false;
212
213 // Load shader
214 if (_shader == nullptr)
215 {
216 _shader = Content::LoadAsyncInternal<Shader>(TEXT("Shaders/ProbesFilter"));
217 _initFailed = _shader == nullptr;
218 if (_initFailed)
219 return false;
220#if COMPILE_WITH_DEV_ENV
221 _shader->OnReloading.Bind<ProbesRendererService, &ProbesRendererService::OnShaderReloading>(this);
222#endif
223 }
224 if (!_shader->IsLoaded())
225 return true;
226 _initFailed |= InitShader();
227
228 // Init rendering pipeline
229 _output = GPUDevice::Instance->CreateTexture(TEXT("ProbesRenderer.Output"));
230 const int32 probeResolution = _current.GetResolution();
231 const PixelFormat probeFormat = _current.GetFormat();
232 _initFailed |= _output->Init(GPUTextureDescription::New2D(probeResolution, probeResolution, probeFormat));
233 _task = New<SceneRenderTask>();
234 auto task = _task;
235 task->Order = -100; // Run before main view rendering (realtime probes will get smaller latency)
236 task->Enabled = false;
237 task->IsCustomRendering = true;
238 task->ActorsSource = ActorsSources::ScenesAndCustomActors;
239 task->Output = _output;
240 auto& view = task->View;
241 view.Flags =
242 ViewFlags::AO |
243 ViewFlags::GI |
244 ViewFlags::DirectionalLights |
245 ViewFlags::PointLights |
246 ViewFlags::SpotLights |
247 ViewFlags::SkyLights |
248 ViewFlags::Decals |
249 ViewFlags::Shadows |
250 ViewFlags::Sky |
251 ViewFlags::Fog;
252 view.Mode = ViewMode::NoPostFx;
253 view.IsOfflinePass = true;
254 view.IsSingleFrame = true;
255 view.StaticFlagsMask = view.StaticFlagsCompare = StaticFlags::ReflectionProbe;
256 task->IsCameraCut = true;
257 task->Resize(probeResolution, probeResolution);
258 task->Render.Bind<ProbesRendererService, &ProbesRendererService::OnRender>(this);
259 task->SetupRender.Bind<ProbesRendererService, &ProbesRendererService::OnSetupRender>(this);
260
261 // Init render targets
262 _probe = GPUDevice::Instance->CreateTexture(TEXT("ProbesRenderer.Probe"));
263 _initFailed |= _probe->Init(GPUTextureDescription::NewCube(probeResolution, probeFormat, GPUTextureFlags::ShaderResource | GPUTextureFlags::RenderTarget | GPUTextureFlags::PerMipViews, 0));
264 _tmpFace = GPUDevice::Instance->CreateTexture(TEXT("ProbesRenderer.TmpFace"));
265 _initFailed |= _tmpFace->Init(GPUTextureDescription::New2D(probeResolution, probeResolution, 0, probeFormat, GPUTextureFlags::ShaderResource | GPUTextureFlags::RenderTarget | GPUTextureFlags::PerMipViews));

Callers

nothing calls this directly

Calls 8

New2DFunction · 0.85
NewCubeFunction · 0.85
IsLoadedMethod · 0.45
CreateTextureMethod · 0.45
GetResolutionMethod · 0.45
GetFormatMethod · 0.45
InitMethod · 0.45
ResizeMethod · 0.45

Tested by

no test coverage detected