12 #ifndef hifi_render_utils_BloomEffect_h
13 #define hifi_render_utils_BloomEffect_h
15 #include <render/Engine.h>
17 #include "BloomStage.h"
19 #include "DeferredFrameTransform.h"
20 #include "LightingModel.h"
22 class BloomConfig :
public render::Task::Config {
26 class BloomThresholdConfig :
public render::Job::Config {
30 class BloomThreshold {
32 using Inputs = render::VaryingSet4<DeferredFrameTransformPointer, gpu::FramebufferPointer, BloomStage::FramePointer, LightingModelPointer>;
33 using Outputs = render::VaryingSet3<gpu::FramebufferPointer, float, graphics::BloomPointer>;
34 using Config = BloomThresholdConfig;
35 using JobModel = render::Job::ModelIO<BloomThreshold, Inputs, Outputs, Config>;
37 BloomThreshold(
unsigned int downsamplingFactor);
39 void configure(
const Config& config);
40 void run(
const render::RenderContextPointer& renderContext,
const Inputs& inputs, Outputs& outputs);
44 #include "BloomThreshold.shared.slh"
46 gpu::FramebufferPointer _outputBuffer;
47 gpu::PipelinePointer _pipeline;
48 gpu::StructBuffer<Parameters> _parameters;
52 class BloomApplyConfig :
public render::Job::Config {
58 using Inputs = render::VaryingSet5<gpu::FramebufferPointer, gpu::FramebufferPointer, gpu::FramebufferPointer, gpu::FramebufferPointer, graphics::BloomPointer>;
59 using Config = BloomApplyConfig;
60 using JobModel = render::Job::ModelI<BloomApply, Inputs, Config>;
64 void configure(
const Config& config);
65 void run(
const render::RenderContextPointer& renderContext,
const Inputs& inputs);
69 #include "BloomApply.shared.slh"
71 gpu::PipelinePointer _pipeline;
72 gpu::StructBuffer<Parameters> _parameters;
77 using Inputs = render::VaryingSet2<gpu::FramebufferPointer, gpu::FramebufferPointer>;
78 using JobModel = render::Job::ModelI<BloomDraw, Inputs>;
82 void run(
const render::RenderContextPointer& renderContext,
const Inputs& inputs);
86 gpu::PipelinePointer _pipeline;
89 class DebugBloomConfig :
public render::Job::Config {
91 Q_PROPERTY(
int mode READ getMode WRITE setMode NOTIFY dirty)
105 DebugBloomConfig() : render::Job::Config(false) {}
107 void setMode(
int mode);
108 int getMode()
const {
return _mode; }
110 int _mode{ MODE_ALL_LEVELS };
118 using Inputs = render::VaryingSet5<gpu::FramebufferPointer, gpu::FramebufferPointer, gpu::FramebufferPointer, gpu::FramebufferPointer, gpu::FramebufferPointer>;
119 using Config = DebugBloomConfig;
120 using JobModel = render::Job::ModelI<DebugBloom, Inputs, Config>;
124 void configure(
const Config& config);
125 void run(
const render::RenderContextPointer& renderContext,
const Inputs& inputs);
128 gpu::PipelinePointer _pipeline;
129 gpu::BufferPointer _params;
130 DebugBloomConfig::Mode _mode;
135 using Inputs = render::VaryingSet4<DeferredFrameTransformPointer, gpu::FramebufferPointer, BloomStage::FramePointer, LightingModelPointer>;
136 using Config = BloomConfig;
137 using JobModel = render::Task::ModelI<BloomEffect, Inputs, Config>;
141 void configure(
const Config& config);
142 void build(JobModel& task,
const render::Varying& inputs, render::Varying& outputs);