1212#include < engine/core/passes/tonemapping_pass.h>
1313#include < engine/core/passes/variance_shadow_pass.h>
1414#include < engine/core/passes/voxelization_pass.h>
15+ #include < engine/core/passes/sky_pass.h>
1516
1617VULKAN_ENGINE_NAMESPACE_BEGIN
1718
@@ -22,30 +23,36 @@ Renders a given scene data to a given window using deferred rendering. Fully par
2223*/
2324class DeferredRenderer : public BaseRenderer
2425{
26+ protected:
2527 enum RendererPasses
2628 {
27- ENVIROMENT_PASS = 0 ,
28- SHADOW_PASS = 1 ,
29- VOXELIZATION_PASS = 2 ,
30- GEOMETRY_PASS = 3 ,
31- PRECOMPOSITION_PASS = 4 ,
32- COMPOSITION_PASS = 5 ,
33- BLOOM_PASS = 6 ,
34- TONEMAPPIN_PASS = 7 ,
35- FXAA_PASS = 8 ,
29+ SKY_PASS = 0 ,
30+ ENVIROMENT_PASS = 1 ,
31+ SHADOW_PASS = 2 ,
32+ VOXELIZATION_PASS = 3 ,
33+ GEOMETRY_PASS = 4 ,
34+ PRECOMPOSITION_PASS = 5 ,
35+ COMPOSITION_PASS = 6 ,
36+ BLOOM_PASS = 7 ,
37+ TONEMAPPIN_PASS = 8 ,
38+ FXAA_PASS = 9 ,
3639 };
3740
3841 // Graphic Settings
3942 ShadowResolution m_shadowQuality = ShadowResolution::MEDIUM;
40- Core::SSR m_SSR = {};
41- Core::VXGI m_VXGI = {};
42- Core::AO m_AO = {};
43- float m_bloomStrength = 0 .05f ;
4443
4544 // Query
4645 bool m_updateShadows = false ;
4746 bool m_updateGI = false ;
4847
48+ virtual void on_before_render (Core::Scene* const scene);
49+
50+ virtual void on_after_render (RenderResult& renderResult, Core::Scene* const scene);
51+
52+ virtual void create_passes ();
53+
54+ virtual void update_enviroment (Core::Skybox* const skybox);
55+
4956 public:
5057 DeferredRenderer (Core::IWindow* window)
5158 : BaseRenderer(window) {
@@ -57,39 +64,43 @@ class DeferredRenderer : public BaseRenderer
5764 , m_shadowQuality(shadowQuality) {
5865 }
5966
60- inline ShadowResolution get_shadow_quality () const {
67+ inline ShadowResolution get_shadow_quality () {
6168 return m_shadowQuality;
6269 }
6370 inline void set_shadow_quality (ShadowResolution quality) {
6471 m_shadowQuality = quality;
6572 if (m_initialized)
6673 m_updateShadows = true ;
6774 }
68- inline float get_bloom_strength () const {
69- return m_bloomStrength ;
75+ inline float get_bloom_strength () {
76+ return get_pass<Core::BloomPass*>(BLOOM_PASS)-> get_bloom_strength () ;
7077 }
7178 inline void set_bloom_strength (float st) {
72- m_bloomStrength = st ;
79+ get_pass<Core::BloomPass*>(BLOOM_PASS)-> set_bloom_strength (st) ;
7380 }
7481 inline void set_SSR_settings (Core::SSR settings) {
75- m_SSR = settings;
82+ get_pass<Core::CompositionPass*>(COMPOSITION_PASS)-> set_SSR_settings ( settings) ;
7683 };
77- inline Core::SSR get_SSR_settings () const {
78- return m_SSR ;
84+ inline Core::SSR get_SSR_settings () {
85+ return get_pass<Core::CompositionPass*>(COMPOSITION_PASS)-> get_SSR_settings () ;
7986 };
8087 inline void set_VXGI_settings (Core::VXGI settings) {
81- if (m_VXGI .resolution != settings.resolution )
88+ if (get_pass<Core::CompositionPass*>(COMPOSITION_PASS)-> get_VXGI_settings () .resolution != settings.resolution )
8289 m_updateGI = true ;
83- m_VXGI = settings;
90+ get_pass<Core::CompositionPass*>(COMPOSITION_PASS)->set_VXGI_settings (settings);
91+ m_passes[VOXELIZATION_PASS]->set_active (settings.enabled );
8492 };
85- inline Core::VXGI get_VXGI_settings () const {
86- return m_VXGI ;
93+ inline Core::VXGI get_VXGI_settings () {
94+ return get_pass<Core::CompositionPass*>(COMPOSITION_PASS)-> get_VXGI_settings () ;
8795 };
8896 inline void set_SSAO_settings (Core::AO settings) {
89- m_AO = settings;
97+ get_pass<Core::PreCompositionPass*>(PRECOMPOSITION_PASS)->set_SSAO_settings (settings);
98+ get_pass<Core::CompositionPass*>(COMPOSITION_PASS)->enable_AO (settings.enabled );
99+ get_pass<Core::CompositionPass*>(COMPOSITION_PASS)->set_AO_type (static_cast <int >(settings.type ));
100+ m_passes[PRECOMPOSITION_PASS]->set_active (settings.enabled && settings.type != Core::AOType::VXAO);
90101 };
91- inline Core::AO get_SSAO_settings () const {
92- return m_AO ;
102+ inline Core::AO get_SSAO_settings () {
103+ return get_pass<Core::PreCompositionPass*>(PRECOMPOSITION_PASS)-> get_SSAO_settings () ;
93104 };
94105 inline void set_shading_output (Core::OutputBuffer output) {
95106 get_pass<Core::CompositionPass*>(COMPOSITION_PASS)->set_output_buffer (output);
@@ -110,15 +121,6 @@ class DeferredRenderer : public BaseRenderer
110121 inline void set_tonemapping_type (Core::TonemappingType type) {
111122 get_pass<Core::TonemappingPass*>(TONEMAPPIN_PASS)->set_tonemapping_type (type);
112123 }
113-
114- protected:
115- virtual void on_before_render (Core::Scene* const scene);
116-
117- virtual void on_after_render (RenderResult& renderResult, Core::Scene* const scene);
118-
119- virtual void create_passes ();
120-
121- virtual void update_enviroment (Core::Skybox* const skybox);
122124};
123125} // namespace Systems
124126VULKAN_ENGINE_NAMESPACE_END
0 commit comments