Showing the changes to libraries/render-utils/src/RenderDeferredTask.cpp (1 of 454 files). Show all
Unified · Split
| @@ -40,6 +40,7 @@ · 39 unmodified lines | |||
| 40 | #include "AntialiasingEffect.h" | 40 | #include "AntialiasingEffect.h" |
| 41 | #include "ToneMappingEffect.h" | 41 | #include "ToneMappingEffect.h" |
| 42 | #include "SubsurfaceScattering.h" | 42 | #include "SubsurfaceScattering.h" |
| 43 | #include "DrawHaze.h" | ||
| 43 | #include "OutlineEffect.h" | 44 | #include "OutlineEffect.h" |
| 44 | #include "BloomEffect.h" | 45 | #include "BloomEffect.h" |
| 45 | 46 | ||
| @@ -146,11 +147,13 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren · 100 unmodified lines | |||
| 146 | // Create the cluster grid of lights, cpu job for now | 147 | // Create the cluster grid of lights, cpu job for now |
| 147 | const auto lightClusteringPassInputs = LightClusteringPass::Inputs(deferredFrameTransform, lightingModel, linearDepthTarget).asVarying(); | 148 | const auto lightClusteringPassInputs = LightClusteringPass::Inputs(deferredFrameTransform, lightingModel, linearDepthTarget).asVarying(); |
| 148 | const auto lightClusters = task.addJob<LightClusteringPass>("LightClustering", lightClusteringPassInputs); | 149 | const auto lightClusters = task.addJob<LightClusteringPass>("LightClustering", lightClusteringPassInputs); |
| 149 | 150 | ||
| 150 | 151 | // Add haze model | |
| 152 | const auto hazeModel = task.addJob<FetchHazeStage>("HazeModel"); | ||
| 153 | |||
| 151 | // DeferredBuffer is complete, now let's shade it into the LightingBuffer | 154 | // DeferredBuffer is complete, now let's shade it into the LightingBuffer |
| 152 | const auto deferredLightingInputs = RenderDeferred::Inputs(deferredFrameTransform, deferredFramebuffer, lightingModel, | 155 | const auto deferredLightingInputs = RenderDeferred::Inputs(deferredFrameTransform, deferredFramebuffer, lightingModel, |
| 153 | surfaceGeometryFramebuffer, ambientOcclusionFramebuffer, scatteringResource, lightClusters).asVarying(); | 156 | surfaceGeometryFramebuffer, ambientOcclusionFramebuffer, scatteringResource, lightClusters, hazeModel).asVarying(); |
| 154 | 157 | ||
| 155 | task.addJob<RenderDeferred>("RenderDeferred", deferredLightingInputs); | 158 | task.addJob<RenderDeferred>("RenderDeferred", deferredLightingInputs); |
| 156 | 159 | ||
| @@ -166,7 +169,10 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren · 9 unmodified lines | |||
| 166 | const auto debugLightClustersInputs = DebugLightClusters::Inputs(deferredFrameTransform, deferredFramebuffer, lightingModel, linearDepthTarget, lightClusters).asVarying(); | 169 | const auto debugLightClustersInputs = DebugLightClusters::Inputs(deferredFrameTransform, deferredFramebuffer, lightingModel, linearDepthTarget, lightClusters).asVarying(); |
| 167 | task.addJob<DebugLightClusters>("DebugLightClusters", debugLightClustersInputs); | 170 | task.addJob<DebugLightClusters>("DebugLightClusters", debugLightClustersInputs); |
| 168 | } | 171 | } |
| 169 | 172 | ||
| 173 | const auto drawHazeInputs = render::Varying(DrawHaze::Inputs(hazeModel, lightingFramebuffer, linearDepthTarget, deferredFrameTransform, lightingFramebuffer)); | ||
| 174 | task.addJob<DrawHaze>("DrawHaze", drawHazeInputs); | ||
| 175 | |||
| 170 | const auto toneAndPostRangeTimer = task.addJob<BeginGPURangeTimer>("BeginToneAndPostRangeTimer", "PostToneOverlaysAntialiasing"); | 176 | const auto toneAndPostRangeTimer = task.addJob<BeginGPURangeTimer>("BeginToneAndPostRangeTimer", "PostToneOverlaysAntialiasing"); |
| 171 | 177 | ||
| 172 | // Add bloom | 178 | // Add bloom |
| @@ -191,15 +197,20 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren · 18 unmodified lines | |||
| 191 | task.addJob<DrawBounds>("DrawZones", zones); | 197 | task.addJob<DrawBounds>("DrawZones", zones); |
| 192 | } | 198 | } |
| 193 | 199 | ||
| 194 | // Overlays | 200 | // Layered Overlays |
| 195 | const auto overlayOpaquesInputs = DrawOverlay3D::Inputs(overlayOpaques, lightingModel).asVarying(); | 201 | const auto filteredOverlaysOpaque = task.addJob<FilterLayeredItems>("FilterOverlaysLayeredOpaque", overlayOpaques, Item::LAYER_3D_FRONT); |
| 196 | const auto overlayTransparentsInputs = DrawOverlay3D::Inputs(overlayTransparents, lightingModel).asVarying(); | 202 | const auto filteredOverlaysTransparent = task.addJob<FilterLayeredItems>("FilterOverlaysLayeredTransparent", overlayTransparents, Item::LAYER_3D_FRONT); |
| 197 | task.addJob<DrawOverlay3D>("DrawOverlay3DOpaque", overlayOpaquesInputs, true); | 203 | const auto overlaysInFrontOpaque = filteredOverlaysOpaque.getN<FilterLayeredItems::Outputs>(0); |
| 198 | task.addJob<DrawOverlay3D>("DrawOverlay3DTransparent", overlayTransparentsInputs, false); | 204 | const auto overlaysInFrontTransparent = filteredOverlaysTransparent.getN<FilterLayeredItems::Outputs>(0); |
| 205 | |||
| 206 | const auto overlayInFrontOpaquesInputs = DrawOverlay3D::Inputs(overlaysInFrontOpaque, lightingModel).asVarying(); | ||
| 207 | const auto overlayInFrontTransparentsInputs = DrawOverlay3D::Inputs(overlaysInFrontTransparent, lightingModel).asVarying(); | ||
| 208 | task.addJob<DrawOverlay3D>("DrawOverlayInFrontOpaque", overlayInFrontOpaquesInputs, true); | ||
| 209 | task.addJob<DrawOverlay3D>("DrawOverlayInFrontTransparent", overlayInFrontTransparentsInputs, false); | ||
| 199 | 210 | ||
| 200 | { // Debug the bounds of the rendered Overlay items, still look at the zbuffer | 211 | { // Debug the bounds of the rendered Overlay items that are marked drawInFront, still look at the zbuffer |
| 201 | task.addJob<DrawBounds>("DrawOverlayOpaqueBounds", overlayOpaques); | 212 | task.addJob<DrawBounds>("DrawOverlayInFrontOpaqueBounds", overlaysInFrontOpaque); |
| 202 | task.addJob<DrawBounds>("DrawOverlayTransparentBounds", overlayTransparents); | 213 | task.addJob<DrawBounds>("DrawOverlayInFrontTransparentBounds", overlaysInFrontTransparent); |
| 203 | } | 214 | } |
| 204 | 215 | ||
| 205 | // Debugging stages | 216 | // Debugging stages |
| @@ -238,6 +249,22 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren · 32 unmodified lines | |||
| 238 | // AA job to be revisited | 249 | // AA job to be revisited |
| 239 | task.addJob<Antialiasing>("Antialiasing", primaryFramebuffer); | 250 | task.addJob<Antialiasing>("Antialiasing", primaryFramebuffer); |
| 240 | 251 | ||
| 252 | // Composite the HUD and HUD overlays | ||
| 253 | task.addJob<CompositeHUD>("HUD"); | ||
| 254 | |||
| 255 | const auto overlaysHUDOpaque = filteredOverlaysOpaque.getN<FilterLayeredItems::Outputs>(1); | ||
| 256 | const auto overlaysHUDTransparent = filteredOverlaysTransparent.getN<FilterLayeredItems::Outputs>(1); | ||
| 257 | |||
| 258 | const auto overlayHUDOpaquesInputs = DrawOverlay3D::Inputs(overlaysHUDOpaque, lightingModel).asVarying(); | ||
| 259 | const auto overlayHUDTransparentsInputs = DrawOverlay3D::Inputs(overlaysHUDTransparent, lightingModel).asVarying(); | ||
| 260 | task.addJob<DrawOverlay3D>("DrawOverlayHUDOpaque", overlayHUDOpaquesInputs, true); | ||
| 261 | task.addJob<DrawOverlay3D>("DrawOverlayHUDTransparent", overlayHUDTransparentsInputs, false); | ||
| 262 | |||
| 263 | { // Debug the bounds of the rendered Overlay items that are marked drawHUDLayer, still look at the zbuffer | ||
| 264 | task.addJob<DrawBounds>("DrawOverlayHUDOpaqueBounds", overlaysHUDOpaque); | ||
| 265 | task.addJob<DrawBounds>("DrawOverlayHUDTransparentBounds", overlaysHUDTransparent); | ||
| 266 | } | ||
| 267 | |||
| 241 | task.addJob<EndGPURangeTimer>("ToneAndPostRangeTimer", toneAndPostRangeTimer); | 268 | task.addJob<EndGPURangeTimer>("ToneAndPostRangeTimer", toneAndPostRangeTimer); |
| 242 | 269 | ||
| 243 | // Blit! | 270 | // Blit! |
| @@ -412,6 +439,18 @@ void DrawOverlay3D::run(const RenderContextPointer& renderContext, const Inputs& · 168 unmodified lines | |||
| 412 | } | 439 | } |
| 413 | } | 440 | } |
| 414 | 441 | ||
| 442 | void CompositeHUD::run(const RenderContextPointer& renderContext) { | ||
| 443 | assert(renderContext->args); | ||
| 444 | assert(renderContext->args->_context); | ||
| 445 | |||
| 446 | // Grab the HUD texture | ||
| 447 | gpu::doInBatch(renderContext->args->_context, [&](gpu::Batch& batch) { | ||
| 448 | if (renderContext->args->_hudOperator) { | ||
| 449 | renderContext->args->_hudOperator(batch, renderContext->args->_hudTexture, renderContext->args->_renderMode == RenderArgs::RenderMode::MIRROR_RENDER_MODE); | ||
| 450 | } | ||
| 451 | }); | ||
| 452 | } | ||
| 453 | |||
| 415 | void Blit::run(const RenderContextPointer& renderContext, const gpu::FramebufferPointer& srcFramebuffer) { | 454 | void Blit::run(const RenderContextPointer& renderContext, const gpu::FramebufferPointer& srcFramebuffer) { |
| 416 | assert(renderContext->args); | 455 | assert(renderContext->args); |
| 417 | assert(renderContext->args->_context); | 456 | assert(renderContext->args->_context); |