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 | 40 | #include "AntialiasingEffect.h" |
| 41 | 41 | #include "ToneMappingEffect.h" |
| 42 | 42 | #include "SubsurfaceScattering.h" |
| 43 | +#include "DrawHaze.h" | |
| 43 | 44 | #include "OutlineEffect.h" |
| 44 | 45 | #include "BloomEffect.h" |
| 45 | 46 | |
| @@ -146,11 +147,13 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren · 100 unmodified lines | ||
| 146 | 147 | // Create the cluster grid of lights, cpu job for now |
| 147 | 148 | const auto lightClusteringPassInputs = LightClusteringPass::Inputs(deferredFrameTransform, lightingModel, linearDepthTarget).asVarying(); |
| 148 | 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 | 154 | // DeferredBuffer is complete, now let's shade it into the LightingBuffer |
| 152 | 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 | 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 | 169 | const auto debugLightClustersInputs = DebugLightClusters::Inputs(deferredFrameTransform, deferredFramebuffer, lightingModel, linearDepthTarget, lightClusters).asVarying(); |
| 167 | 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 | 176 | const auto toneAndPostRangeTimer = task.addJob<BeginGPURangeTimer>("BeginToneAndPostRangeTimer", "PostToneOverlaysAntialiasing"); |
| 171 | 177 | |
| 172 | 178 | // Add bloom |
| @@ -191,15 +197,20 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren · 18 unmodified lines | ||
| 191 | 197 | task.addJob<DrawBounds>("DrawZones", zones); |
| 192 | 198 | } |
| 193 | 199 | |
| 194 | − // Overlays | |
| 195 | − const auto overlayOpaquesInputs = DrawOverlay3D::Inputs(overlayOpaques, lightingModel).asVarying(); | |
| 196 | − const auto overlayTransparentsInputs = DrawOverlay3D::Inputs(overlayTransparents, lightingModel).asVarying(); | |
| 197 | − task.addJob<DrawOverlay3D>("DrawOverlay3DOpaque", overlayOpaquesInputs, true); | |
| 198 | − task.addJob<DrawOverlay3D>("DrawOverlay3DTransparent", overlayTransparentsInputs, false); | |
| 200 | + // Layered Overlays | |
| 201 | + const auto filteredOverlaysOpaque = task.addJob<FilterLayeredItems>("FilterOverlaysLayeredOpaque", overlayOpaques, Item::LAYER_3D_FRONT); | |
| 202 | + const auto filteredOverlaysTransparent = task.addJob<FilterLayeredItems>("FilterOverlaysLayeredTransparent", overlayTransparents, Item::LAYER_3D_FRONT); | |
| 203 | + const auto overlaysInFrontOpaque = filteredOverlaysOpaque.getN<FilterLayeredItems::Outputs>(0); | |
| 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 | |
| 201 | − task.addJob<DrawBounds>("DrawOverlayOpaqueBounds", overlayOpaques); | |
| 202 | − task.addJob<DrawBounds>("DrawOverlayTransparentBounds", overlayTransparents); | |
| 211 | + { // Debug the bounds of the rendered Overlay items that are marked drawInFront, still look at the zbuffer | |
| 212 | + task.addJob<DrawBounds>("DrawOverlayInFrontOpaqueBounds", overlaysInFrontOpaque); | |
| 213 | + task.addJob<DrawBounds>("DrawOverlayInFrontTransparentBounds", overlaysInFrontTransparent); | |
| 203 | 214 | } |
| 204 | 215 | |
| 205 | 216 | // Debugging stages |
| @@ -238,6 +249,22 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren · 32 unmodified lines | ||
| 238 | 249 | // AA job to be revisited |
| 239 | 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 | 268 | task.addJob<EndGPURangeTimer>("ToneAndPostRangeTimer", toneAndPostRangeTimer); |
| 242 | 269 | |
| 243 | 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 | 454 | void Blit::run(const RenderContextPointer& renderContext, const gpu::FramebufferPointer& srcFramebuffer) { |
| 416 | 455 | assert(renderContext->args); |
| 417 | 456 | assert(renderContext->args->_context); |