| 220 | } |
| 221 | |
| 222 | void Renderer::Render(SceneRenderTask* task) |
| 223 | { |
| 224 | PROFILE_GPU_CPU_NAMED("Render Frame"); |
| 225 | |
| 226 | // Prepare GPU context |
| 227 | auto context = GPUDevice::Instance->GetMainContext(); |
| 228 | context->ResetState(); |
| 229 | context->FlushState(); |
| 230 | const Viewport viewport = task->GetViewport(); |
| 231 | context->SetViewportAndScissors(viewport); |
| 232 | |
| 233 | // Prepare render context |
| 234 | RenderContext renderContext(task); |
| 235 | renderContext.List = RenderList::GetFromPool(); |
| 236 | RenderContextBatch renderContextBatch(task); |
| 237 | renderContextBatch.Contexts.Add(renderContext); |
| 238 | |
| 239 | // Pre-init render view cache early in case it's used in PreRender drawing |
| 240 | Float4 jitter = renderContext.View.TemporalAAJitter; // Preserve temporal jitter value (PrepareCache modifies it) |
| 241 | renderContext.View.PrepareCache(renderContext, viewport.Width, viewport.Height, Float2::Zero); |
| 242 | renderContext.View.TemporalAAJitter = jitter; |
| 243 | |
| 244 | #if USE_EDITOR |
| 245 | // Turn on low quality rendering during baking lightmaps (leave more GPU power for baking) |
| 246 | const auto flags = renderContext.View.Flags; |
| 247 | if (!renderContext.View.IsOfflinePass && IsBakingLightmaps) |
| 248 | { |
| 249 | renderContext.View.Flags &= ~(ViewFlags::AO |
| 250 | | ViewFlags::Shadows |
| 251 | | ViewFlags::AntiAliasing |
| 252 | | ViewFlags::CustomPostProcess |
| 253 | | ViewFlags::Bloom |
| 254 | | ViewFlags::ToneMapping |
| 255 | | ViewFlags::EyeAdaptation |
| 256 | | ViewFlags::CameraArtifacts |
| 257 | | ViewFlags::Reflections |
| 258 | | ViewFlags::SSR |
| 259 | | ViewFlags::LensFlares |
| 260 | | ViewFlags::MotionBlur |
| 261 | | ViewFlags::Fog |
| 262 | | ViewFlags::PhysicsDebug |
| 263 | | ViewFlags::Decals |
| 264 | | ViewFlags::GI |
| 265 | | ViewFlags::DebugDraw |
| 266 | | ViewFlags::ContactShadows |
| 267 | | ViewFlags::DepthOfField); |
| 268 | } |
| 269 | |
| 270 | // Force Debug Draw usage in some specific views that depend on it |
| 271 | if (renderContext.View.Mode == ViewMode::PhysicsColliders) |
| 272 | { |
| 273 | renderContext.View.Flags |= ViewFlags::DebugDraw; |
| 274 | } |
| 275 | #endif |
| 276 | |
| 277 | // Perform the actual rendering |
| 278 | task->OnPreRender(context, renderContext); |
| 279 | RenderInner(task, renderContext, renderContextBatch); |
no test coverage detected