The Dirtchamber
A mixed reality testing environment for real-time global illumination algorithms
deferred_renderer.h
Go to the documentation of this file.
1 /*
2  * Dune D3D library - Tobias Alexander Franke 2011
3  * For copyright and license see LICENSE
4  * http://www.tobias-franke.eu
5  */
6 
9 #ifndef DUNE_DEFERRED_RENDERER
10 #define DUNE_DEFERRED_RENDERER
11 
12 #include <vector>
13 #include <string>
14 #include <map>
15 
16 #include "gbuffer.h"
17 #include "postprocess.h"
18 #include "simple_mesh.h"
19 
20 #include <D3D11.h>
21 
22 namespace dune
23 {
41  {
42  private:
43  typedef std::map<UINT, texture*> buffer_collection;
44  typedef std::vector<ID3D11ShaderResourceView*> srv_collection;
45 
46  buffer_collection buffers_;
47  srv_collection srvs_;
48 
49  INT buffers_slot_;
50  INT overlay_slot_;
51 
52  ID3D11ShaderResourceView* overlay_;
53 
54  simple_mesh fs_triangle_;
55 
56  ID3D11PixelShader* ps_deferred_;
57  ID3D11PixelShader* ps_overlay_;
58 
59  sampler_state ss_shadows_;
60  sampler_state ss_lpv_;
61 
62  postprocessor* postprocessor_;
63  bool do_record_;
64 
66  void reassign_everything(ID3D11DeviceContext* context);
67 
69  void clear_assigned(ID3D11DeviceContext* context);
70 
72  void blit(ID3D11DeviceContext* context, ID3D11RenderTargetView* backbuffer);
73 
75  ID3D11ShaderResourceView* target(const tstring& name) const;
76 
77  protected:
79  void overlay(ID3D11DeviceContext* context, ID3D11RenderTargetView* backbuffer);
80 
82  void deferred(ID3D11DeviceContext* context, ID3D11RenderTargetView* backbuffer);
83 
84  public:
86  virtual ~deferred_renderer() {}
87 
88  virtual void create(ID3D11Device* device);
89 
90  void set_shader(ID3D11Device* device,
91  ID3DBlob* input_binary,
92  ID3D11VertexShader* vs_deferred,
93  ID3D11PixelShader* ps_deferred,
94  ID3D11PixelShader* ps_overlay,
95  UINT start_slot,
96  UINT overlay_slot);
97 
98  virtual void destroy();
99 
111  void start_capture(ID3D11Device* device, size_t width, size_t height, size_t fps);
112 
114  void stop_capture();
115 
116  void render(ID3D11DeviceContext* context, ID3D11RenderTargetView* backbuffer, ID3D11DepthStencilView* dsv = nullptr);
117 
119  const buffer_collection& buffers();
120 
130  void add_buffer(gbuffer& buffer, UINT slot);
131 
133  void add_buffer(texture& target, UINT slot);
134 
137 
139  void show_target(ID3D11DeviceContext* context, const tstring& name);
140 
142  virtual void resize(UINT width, UINT height);
143  };
144 }
145 
146 #endif
void stop_capture()
Stop capturing and finalize an MP4 video file.
Definition: deferred_renderer.cpp:177
void show_target(ID3D11DeviceContext *context, const tstring &name)
Select a render_target by name to display in a small overlay when rendering.
Definition: deferred_renderer.cpp:333
A base interface for a postprocessor pipeline.
Definition: postprocess.h:28
const buffer_collection & buffers()
Returns the map containing all buffers indexed by their registers.
Definition: deferred_renderer.cpp:387
The deferred renderer base class.
Definition: deferred_renderer.h:40
void start_capture(ID3D11Device *device, size_t width, size_t height, size_t fps)
Capture the backbuffer and write it to an MP4 video file.
Definition: deferred_renderer.cpp:169
void blit(ID3D11DeviceContext *context, ID3D11RenderTargetView *backbuffer)
Render a fullscreen triangle pass.
Definition: deferred_renderer.cpp:183
void clear_assigned(ID3D11DeviceContext *context)
Clear all registers that have been assigned previously.
Definition: deferred_renderer.cpp:356
void deferred(ID3D11DeviceContext *context, ID3D11RenderTargetView *backbuffer)
Render the deferred pass with an optional postprocessing pass.
Definition: deferred_renderer.cpp:199
ID3D11ShaderResourceView * target(const tstring &name) const
Returns a render_target of a given name.
Definition: deferred_renderer.cpp:319
void set_postprocessor(postprocessor *pp)
Set a postprocessor to use. If this isn't called or set to nullptr, the deferred renderer output is d...
Definition: deferred_renderer.cpp:226
A wrapper class for a sampler state.
Definition: shader_resource.h:49
void add_buffer(gbuffer &buffer, UINT slot)
Add a gbuffer to the deferred renderer buffer map.
Definition: deferred_renderer.cpp:370
void overlay(ID3D11DeviceContext *context, ID3D11RenderTargetView *backbuffer)
Render a selected target into a small preview window on top of the backbuffer.
Definition: deferred_renderer.cpp:231
Wrapper for a Direct3D texture object.
Definition: texture.h:25
A geometry buffer (collection of render_target objects).
Definition: gbuffer.h:30
A very simple mesh class with position-only vertex attributes.
Definition: simple_mesh.h:31
virtual void resize(UINT width, UINT height)
Resize the deferred_renderer's output to a new width/height .
Definition: deferred_renderer.cpp:338
void reassign_everything(ID3D11DeviceContext *context)
Reassigns all buffers in buffers_ to their respective registers.
Definition: deferred_renderer.cpp:350