12 #ifndef hifi_DebugDeferredBuffer_h
13 #define hifi_DebugDeferredBuffer_h
17 #include <render/DrawTask.h>
18 #include "DeferredFrameTransform.h"
19 #include "DeferredFramebuffer.h"
20 #include "SurfaceGeometryPass.h"
21 #include "AmbientOcclusionEffect.h"
22 #include "VelocityBufferPass.h"
24 #include "LightStage.h"
26 class DebugDeferredBufferConfig :
public render::Job::Config {
28 Q_PROPERTY(
int mode MEMBER mode WRITE setMode)
29 Q_PROPERTY(glm::vec4 size MEMBER size NOTIFY dirty)
31 DebugDeferredBufferConfig() : render::Job::Config(false) {}
33 void setMode(
int newMode);
36 glm::vec4 size{ 0.0f, -1.0f, 1.0f, 1.0f };
41 class DebugDeferredBuffer {
43 using Inputs = render::VaryingSet7<DeferredFramebufferPointer,
44 LinearDepthFramebufferPointer,
45 SurfaceGeometryFramebufferPointer,
46 AmbientOcclusionFramebufferPointer,
47 VelocityFramebufferPointer,
48 DeferredFrameTransformPointer,
49 LightStage::ShadowFramePointer>;
50 using Config = DebugDeferredBufferConfig;
51 using JobModel = render::Job::ModelI<DebugDeferredBuffer, Inputs, Config>;
53 DebugDeferredBuffer();
54 ~DebugDeferredBuffer();
56 void configure(
const Config& config);
57 void run(
const render::RenderContextPointer& renderContext,
const Inputs& inputs);
60 friend class DebugDeferredBufferConfig;
81 ShadowCascadeIndicesMode,
87 DiffusedCurvatureMode,
88 DiffusedNormalCurvatureMode,
89 CurvatureOcclusionMode,
92 AmbientOcclusionBlurredMode,
93 AmbientOcclusionNormalMode,
104 #include "debug_deferred_buffer_shared.slh"
106 using ParametersBuffer = gpu::StructBuffer<DebugParameters>;
108 struct CustomPipeline {
109 gpu::PipelinePointer pipeline;
110 mutable QFileInfo info;
112 using StandardPipelines = std::array<gpu::PipelinePointer, NumModes>;
113 using CustomPipelines = std::unordered_map<std::string, CustomPipeline>;
115 bool pipelineNeedsUpdate(Mode mode,
const std::string& customFile = std::string())
const;
116 const gpu::PipelinePointer& getPipeline(Mode mode,
const std::string& customFile = std::string());
117 std::string getShaderSourceCode(Mode mode,
const std::string& customFile = std::string());
119 ParametersBuffer _parameters;
120 StandardPipelines _pipelines;
121 CustomPipelines _customPipelines;
122 int _geometryId{ 0 };