Showing the changes to libraries/render-utils/src/RenderDeferredTask.cpp (1 of 244 files). Show all
Unified · Split
| @@ -214,38 +214,27 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren · 213 unmodified lines | ||
| 214 | 214 | task.addJob<DrawBounds>("DrawZones", zones); |
| 215 | 215 | const auto frustums = task.addJob<ExtractFrustums>("ExtractFrustums"); |
| 216 | 216 | const auto viewFrustum = frustums.getN<ExtractFrustums::Output>(ExtractFrustums::VIEW_FRUSTUM); |
| 217 | − const auto shadowFrustum = frustums.getN<ExtractFrustums::Output>(ExtractFrustums::SHADOW_FRUSTUM); | |
| 218 | 217 | task.addJob<DrawFrustum>("DrawViewFrustum", viewFrustum, glm::vec3(1.0f, 1.0f, 0.0f)); |
| 219 | − task.addJob<DrawFrustum>("DrawShadowFrustum", shadowFrustum, glm::vec3(0.0f, 0.0f, 1.0f)); | |
| 218 | + for (auto i = 0; i < ExtractFrustums::SHADOW_CASCADE_FRUSTUM_COUNT; i++) { | |
| 219 | + const auto shadowFrustum = frustums.getN<ExtractFrustums::Output>(ExtractFrustums::SHADOW_CASCADE0_FRUSTUM+i); | |
| 220 | + float tint = 1.0f - i / float(ExtractFrustums::SHADOW_CASCADE_FRUSTUM_COUNT - 1); | |
| 221 | + char jobName[64]; | |
| 222 | + sprintf(jobName, "DrawShadowFrustum%d", i); | |
| 223 | + task.addJob<DrawFrustum>(jobName, shadowFrustum, glm::vec3(0.0f, tint, 1.0f)); | |
| 224 | + } | |
| 220 | 225 | |
| 221 | 226 | // Render.getConfig("RenderMainView.DrawSelectionBounds").enabled = true |
| 222 | 227 | task.addJob<DrawBounds>("DrawSelectionBounds", selectedItems); |
| 223 | 228 | } |
| 224 | 229 | |
| 225 | − // Layered Overlays | |
| 226 | − const auto filteredOverlaysOpaque = task.addJob<FilterLayeredItems>("FilterOverlaysLayeredOpaque", overlayOpaques, Item::LAYER_3D_FRONT); | |
| 227 | − const auto filteredOverlaysTransparent = task.addJob<FilterLayeredItems>("FilterOverlaysLayeredTransparent", overlayTransparents, Item::LAYER_3D_FRONT); | |
| 228 | − const auto overlaysInFrontOpaque = filteredOverlaysOpaque.getN<FilterLayeredItems::Outputs>(0); | |
| 229 | − const auto overlaysInFrontTransparent = filteredOverlaysTransparent.getN<FilterLayeredItems::Outputs>(0); | |
| 230 | − | |
| 231 | − const auto overlayInFrontOpaquesInputs = DrawOverlay3D::Inputs(overlaysInFrontOpaque, lightingModel).asVarying(); | |
| 232 | − const auto overlayInFrontTransparentsInputs = DrawOverlay3D::Inputs(overlaysInFrontTransparent, lightingModel).asVarying(); | |
| 233 | − task.addJob<DrawOverlay3D>("DrawOverlayInFrontOpaque", overlayInFrontOpaquesInputs, true); | |
| 234 | − task.addJob<DrawOverlay3D>("DrawOverlayInFrontTransparent", overlayInFrontTransparentsInputs, false); | |
| 235 | − | |
| 236 | − { // Debug the bounds of the rendered Overlay items that are marked drawInFront, still look at the zbuffer | |
| 237 | − task.addJob<DrawBounds>("DrawOverlayInFrontOpaqueBounds", overlaysInFrontOpaque); | |
| 238 | − task.addJob<DrawBounds>("DrawOverlayInFrontTransparentBounds", overlaysInFrontTransparent); | |
| 239 | − } | |
| 240 | − | |
| 241 | 230 | // AA job to be revisited |
| 242 | 231 | const auto antialiasingInputs = Antialiasing::Inputs(deferredFrameTransform, primaryFramebuffer, linearDepthTarget, velocityBuffer).asVarying(); |
| 243 | 232 | task.addJob<Antialiasing>("Antialiasing", antialiasingInputs); |
| 244 | 233 | |
| 245 | − // Debugging stages | |
| 234 | + // Debugging stages | |
| 246 | 235 | { |
| 247 | 236 | // Debugging Deferred buffer job |
| 248 | − const auto debugFramebuffers = render::Varying(DebugDeferredBuffer::Inputs(deferredFramebuffer, linearDepthTarget, surfaceGeometryFramebuffer, ambientOcclusionFramebuffer, velocityBuffer)); | |
| 237 | + const auto debugFramebuffers = render::Varying(DebugDeferredBuffer::Inputs(deferredFramebuffer, linearDepthTarget, surfaceGeometryFramebuffer, ambientOcclusionFramebuffer, velocityBuffer, deferredFrameTransform)); | |
| 249 | 238 | task.addJob<DebugDeferredBuffer>("DebugDeferredBuffer", debugFramebuffers); |
| 250 | 239 | |
| 251 | 240 | const auto debugSubsurfaceScatteringInputs = DebugSubsurfaceScattering::Inputs(deferredFrameTransform, deferredFramebuffer, lightingModel, |
| @@ -272,6 +261,22 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren · 20 unmodified lines | ||
| 272 | 261 | task.addJob<DebugZoneLighting>("DrawZoneStack", deferredFrameTransform); |
| 273 | 262 | } |
| 274 | 263 | |
| 264 | + // Layered Overlays | |
| 265 | + const auto filteredOverlaysOpaque = task.addJob<FilterLayeredItems>("FilterOverlaysLayeredOpaque", overlayOpaques, Item::LAYER_3D_FRONT); | |
| 266 | + const auto filteredOverlaysTransparent = task.addJob<FilterLayeredItems>("FilterOverlaysLayeredTransparent", overlayTransparents, Item::LAYER_3D_FRONT); | |
| 267 | + const auto overlaysInFrontOpaque = filteredOverlaysOpaque.getN<FilterLayeredItems::Outputs>(0); | |
| 268 | + const auto overlaysInFrontTransparent = filteredOverlaysTransparent.getN<FilterLayeredItems::Outputs>(0); | |
| 269 | + | |
| 270 | + const auto overlayInFrontOpaquesInputs = DrawOverlay3D::Inputs(overlaysInFrontOpaque, lightingModel).asVarying(); | |
| 271 | + const auto overlayInFrontTransparentsInputs = DrawOverlay3D::Inputs(overlaysInFrontTransparent, lightingModel).asVarying(); | |
| 272 | + task.addJob<DrawOverlay3D>("DrawOverlayInFrontOpaque", overlayInFrontOpaquesInputs, true); | |
| 273 | + task.addJob<DrawOverlay3D>("DrawOverlayInFrontTransparent", overlayInFrontTransparentsInputs, false); | |
| 274 | + | |
| 275 | + { // Debug the bounds of the rendered Overlay items that are marked drawInFront, still look at the zbuffer | |
| 276 | + task.addJob<DrawBounds>("DrawOverlayInFrontOpaqueBounds", overlaysInFrontOpaque); | |
| 277 | + task.addJob<DrawBounds>("DrawOverlayInFrontTransparentBounds", overlaysInFrontTransparent); | |
| 278 | + } | |
| 279 | + | |
| 275 | 280 | // Composite the HUD and HUD overlays |
| 276 | 281 | task.addJob<CompositeHUD>("HUD"); |
| 277 | 282 | |
| @@ -565,17 +570,20 @@ void ExtractFrustums::run(const render::RenderContextPointer& renderContext, Out · 287 unmodified lines | ||
| 565 | 570 | } |
| 566 | 571 | |
| 567 | 572 | // Return shadow frustum |
| 568 | − auto& shadowFrustum = output[SHADOW_FRUSTUM].edit<ViewFrustumPointer>(); | |
| 569 | 573 | auto lightStage = args->_scene->getStage<LightStage>(LightStage::getName()); |
| 570 | − if (lightStage) { | |
| 571 | − auto globalShadow = lightStage->getCurrentKeyShadow(); | |
| 572 | − | |
| 573 | − if (globalShadow) { | |
| 574 | − shadowFrustum = globalShadow->getFrustum(); | |
| 574 | + for (auto i = 0; i < SHADOW_CASCADE_FRUSTUM_COUNT; i++) { | |
| 575 | + auto& shadowFrustum = output[SHADOW_CASCADE0_FRUSTUM+i].edit<ViewFrustumPointer>(); | |
| 576 | + if (lightStage) { | |
| 577 | + auto globalShadow = lightStage->getCurrentKeyShadow(); | |
| 578 | + | |
| 579 | + if (globalShadow && i<(int)globalShadow->getCascadeCount()) { | |
| 580 | + auto& cascade = globalShadow->getCascade(i); | |
| 581 | + shadowFrustum = cascade.getFrustum(); | |
| 582 | + } else { | |
| 583 | + shadowFrustum.reset(); | |
| 584 | + } | |
| 575 | 585 | } else { |
| 576 | 586 | shadowFrustum.reset(); |
| 577 | 587 | } |
| 578 | − } else { | |
| 579 | − shadowFrustum.reset(); | |
| 580 | 588 | } |
| 581 | 589 | } |