12 #ifndef hifi_ToneMapAndResample_h
13 #define hifi_ToneMapAndResample_h
15 #include <DependencyManager.h>
16 #include <NumericalConstants.h>
18 #include <gpu/Resource.h>
19 #include <gpu/Pipeline.h>
20 #include <render/Forward.h>
21 #include <render/DrawTask.h>
23 enum class ToneCurve {
31 class ToneMappingConfig :
public render::Job::Config {
33 Q_PROPERTY(
float exposure MEMBER exposure WRITE setExposure);
34 Q_PROPERTY(
int curve MEMBER curve WRITE setCurve);
37 ToneMappingConfig() : render::Job::Config(true) {}
39 void setExposure(
float newExposure) { exposure = newExposure; emit dirty(); }
40 void setCurve(
int newCurve) { curve = std::max((
int)ToneCurve::None, std::min((
int)ToneCurve::Filmic, newCurve)); emit dirty(); }
43 float exposure{ 0.0f };
44 int curve{ (int)ToneCurve::Gamma22 };
50 class ToneMapAndResample {
53 virtual ~ToneMapAndResample() {}
55 void render(RenderArgs* args,
const gpu::TexturePointer& lightingBuffer, gpu::FramebufferPointer& destinationBuffer);
57 void setExposure(
float exposure);
58 float getExposure()
const {
return _parametersBuffer.get<Parameters>()._exposure; }
60 void setToneCurve(ToneCurve curve);
61 ToneCurve getToneCurve()
const {
return (ToneCurve)_parametersBuffer.get<Parameters>()._toneCurve; }
64 using Input = render::VaryingSet2<gpu::FramebufferPointer, gpu::FramebufferPointer>;
65 using Output = gpu::FramebufferPointer;
66 using Config = ToneMappingConfig;
67 using JobModel = render::Job::ModelIO<ToneMapAndResample, Input, Output, Config>;
69 void configure(
const Config& config);
70 void run(
const render::RenderContextPointer& renderContext,
const Input& input, Output& output);
73 static gpu::PipelinePointer _pipeline;
74 static gpu::PipelinePointer _mirrorPipeline;
76 gpu::FramebufferPointer _destinationFrameBuffer;
78 float _factor{ 2.0f };
80 gpu::FramebufferPointer getResampledFrameBuffer(
const gpu::FramebufferPointer& sourceFramebuffer);
83 gpu::PipelinePointer _blitLightBuffer;
88 float _exposure = 0.0f;
89 float _twoPowExposure = 1.0f;
91 int _toneCurve = (int)ToneCurve::Gamma22;
97 typedef gpu::BufferView UniformBufferView;
98 gpu::BufferView _parametersBuffer;