The Dirtchamber
A mixed reality testing environment for real-time global illumination algorithms
pppipe.h
Go to the documentation of this file.
1 /*
2  * The Dirtchamber - Tobias Alexander Franke 2013
3  * For copyright and license see LICENSE
4  * http://www.tobias-franke.eu
5  */
6 
9 #ifndef PPPIPE
10 #define PPPIPE
11 
12 #include <dune/cbuffer.h>
13 #include <dune/postprocess.h>
14 #include <dune/serializer.h>
15 
28 {
29 public:
30  struct parameters
31  {
32  BOOL ssao_enabled;
33  float ssao_scale;
34 
35  BOOL godrays_enabled;
36  float godrays_tau;
37 
38  BOOL dof_enabled;
39  float dof_focal_plane;
40  float dof_coc_scale;
41 
42  BOOL bloom_enabled;
43  float bloom_sigma;
44  float bloom_treshold;
45 
46  BOOL fxaa_enabled;
47 
48  BOOL exposure_adapt;
49  float exposure_key;
50  float exposure_speed;
51 
52  BOOL crt_enabled;
53  BOOL film_grain_enabled;
54  };
55 
56 protected:
58  cb_pp_parameters cb_pp_parameters_;
59 
60  ID3D11PixelShader* ssao_;
61  ID3D11PixelShader* bloom_;
62  ID3D11PixelShader* godrays_;
63  ID3D11PixelShader* godrays_merge_;
64  ID3D11PixelShader* dof_;
65  ID3D11PixelShader* adapt_exposure_;
66  ID3D11PixelShader* fxaa_;
67  ID3D11PixelShader* bloom_treshold_;
68  ID3D11PixelShader* crt_;
69  ID3D11PixelShader* film_grain_;
70 
71  ID3D11PixelShader* gauss_godrays_h_;
72  ID3D11PixelShader* gauss_godrays_v_;
73  ID3D11PixelShader* gauss_bloom_h_;
74  ID3D11PixelShader* gauss_bloom_v_;
75  ID3D11PixelShader* gauss_dof_h_;
76  ID3D11PixelShader* gauss_dof_v_;
77  ID3D11PixelShader* copy_;
78 
79  virtual void do_create(ID3D11Device* device);
80  virtual void do_destroy();
81  virtual void do_set_shader(ID3D11Device* device);
82  virtual void do_resize(UINT width, UINT height);
83 
84  dune::render_target blurred_[6];
85  dune::render_target bloom_full_;
86  dune::render_target frontbuffer_blurred_;
87 
88  dune::render_target temporary_;
89  dune::render_target rt_adapted_luminance_[2];
90 
92 
93  void dof(ID3D11DeviceContext* context, dune::render_target& in, dune::render_target& out);
94  void dofblur(ID3D11DeviceContext* context, dune::render_target& in, dune::render_target& out);
96 
98 
99  void bloom(ID3D11DeviceContext* context, dune::render_target& frontbuffer);
100  void bloomblur(ID3D11DeviceContext* context, dune::render_target& in, dune::render_target& out);
102 
104  void godrays(ID3D11DeviceContext* context, dune::render_target& in, dune::render_target& out);
105 
107  void render(ID3D11DeviceContext* context, ID3D11PixelShader* ps, dune::render_target& in, ID3D11RenderTargetView* out);
108 
109 public:
110  virtual void render(ID3D11DeviceContext* context, ID3D11RenderTargetView* backbuffer);
111 
113 
114  cb_pp_parameters& parameters() { return cb_pp_parameters_; }
115  const cb_pp_parameters& parameters() const { return cb_pp_parameters_; }
117 };
118 
120 
124 
125 #endif
cb_pp_parameters & parameters()
Return local cbuffer parameters.
Definition: pppipe.h:114
Seralizer to read/write Dune objects from/into JSON/XML.
Definition: serializer.h:41
A base interface for a postprocessor pipeline.
Definition: postprocess.h:28
const cb_pp_parameters & parameters() const
Return local cbuffer parameters.
Definition: pppipe.h:115
void bloom(ID3D11DeviceContext *context, dune::render_target &frontbuffer)
Render bloom and blur it.
Definition: pppipe.cpp:218
void godrays(ID3D11DeviceContext *context, dune::render_target &in, dune::render_target &out)
Compute godrays on halfsize buffer.
Definition: pppipe.cpp:227
render_target & frontbuffer()
Render into this render_target for the postprocessor.
Definition: postprocess.h:87
virtual void do_set_shader(ID3D11Device *device)
Overwrite this method to initializes further shader instances.
Definition: pppipe.cpp:26
virtual void do_create(ID3D11Device *device)
Overwrite this method to add your own creation code.
Definition: pppipe.cpp:61
const dune::serializer & operator>>(const dune::serializer &s, pppipe &p)
Read/write postprocessor from/to a serializer.
Definition: pppipe.cpp:361
void dof(ID3D11DeviceContext *context, dune::render_target &in, dune::render_target &out)
Render depth of field and blur it.
Definition: pppipe.cpp:142
virtual void do_destroy()
Overwrite this to destroy additional resources created.
Definition: pppipe.cpp:87
dune::serializer & operator<<(dune::serializer &s, const pppipe &p)
Read/write postprocessor from/to a serializer.
Definition: pppipe.cpp:333
virtual void do_resize(UINT width, UINT height)
Overwrite this method to react to resizes.
Definition: pppipe.cpp:55
void bloomblur(ID3D11DeviceContext *context, dune::render_target &in, dune::render_target &out)
Render bloom and blur it.
Definition: pppipe.cpp:186
void dofblur(ID3D11DeviceContext *context, dune::render_target &in, dune::render_target &out)
Render depth of field and blur it.
Definition: pppipe.cpp:158
A render target wrapper.
Definition: render_target.h:30
A default implementation of the postprocessor.
Definition: pppipe.h:27
void render(ID3D11DeviceContext *context, ID3D11PixelShader *ps, dune::render_target &in, ID3D11RenderTargetView *out)
Render the entire pipeline by switching back and forth between a two temporary buffers.
Definition: pppipe.cpp:121