History

Merge branch 'master' of git://github.com/highfidelity/hifi into bloom

Olivier Prat committed 9 years ago

Commit fcf1c302 parents 055270d ff36cbf454 files · +14270 −6319Browse files

Showing the changes to libraries/render-utils/src/RenderDeferredTask.cpp (1 of 454 files). Show all

Unified · Split

libraries/render-utils/src/RenderDeferredTask.cpp+51−12
@@ -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 now147 // 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 LightingBuffer154 // 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 bloom178 // 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 // Overlays200 // 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 zbuffer211 { // 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 stages216 // Debugging stages
@@ -238,6 +249,22 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren · 32 unmodified lines
238 // AA job to be revisited249 // 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
442void 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
415void Blit::run(const RenderContextPointer& renderContext, const gpu::FramebufferPointer& srcFramebuffer) {454void 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);