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 #include "TonemappingStage.h"
25 class ToneMappingConfig :
public render::Job::Config {
27 Q_PROPERTY(
bool debug MEMBER debug WRITE setDebug NOTIFY dirty);
28 Q_PROPERTY(
int curve MEMBER curve WRITE setCurve NOTIFY dirty);
29 Q_PROPERTY(
float exposure MEMBER exposure WRITE setExposure NOTIFY dirty);
32 ToneMappingConfig() : render::Job::Config(true) {}
34 void setDebug(
bool newDebug) { debug = newDebug; emit dirty(); }
35 void setCurve(
int newCurve) { curve = std::max(0, std::min((
int)TonemappingCurve::FILMIC, newCurve)); emit dirty(); }
36 void setExposure(
float newExposure) { exposure = newExposure; emit dirty(); }
39 int curve { (int)TonemappingCurve::SRGB };
40 float exposure { 0.0f };
46 class ToneMapAndResample {
49 virtual ~ToneMapAndResample() {}
51 void setCurve(TonemappingCurve curve);
52 void setExposure(
float exposure);
55 using Input = render::VaryingSet3<gpu::FramebufferPointer, gpu::FramebufferPointer, TonemappingStage::FramePointer>;
56 using Output = gpu::FramebufferPointer;
57 using Config = ToneMappingConfig;
58 using JobModel = render::Job::ModelIO<ToneMapAndResample, Input, Output, Config>;
60 void configure(
const Config& config);
61 void run(
const render::RenderContextPointer& renderContext,
const Input& input, Output& output);
64 static gpu::PipelinePointer _pipeline;
65 static gpu::PipelinePointer _mirrorPipeline;
67 gpu::FramebufferPointer _destinationFrameBuffer;
70 float _exposure { 0.0f };
72 bool _debug {
false };
73 TonemappingCurve _debugCurve { TonemappingCurve::SRGB };
74 float _debugExposure { 0.0f };
79 float _twoPowExposure = 1.0f;
80 int _toneCurve = (int)TonemappingCurve::SRGB;
85 typedef gpu::BufferView UniformBufferView;
86 gpu::BufferView _parametersBuffer;