// Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors. // All rights reserved. // Code licensed under the BSD License. // http://www.anki3d.org/LICENSE #pragma once #include #include namespace anki { /// @addtogroup renderer /// @{ /// Clustered deferred light pass. class LightShading : public RendererObject { public: LightShading() { registerDebugRenderTarget("LightShading"); } Error init(); void populateRenderGraph(RenderingContext& ctx); RenderTargetHandle getRt() const { return m_runCtx.m_rt; } private: class { public: RenderTargetDesc m_rtDescr; // Light shaders ShaderProgramResourcePtr m_prog; ShaderProgramPtr m_grProg; } m_lightShading; class { public: ShaderProgramResourcePtr m_prog; Array m_grProgs; } m_skybox; class { public: ShaderProgramResourcePtr m_prog; ShaderProgramPtr m_grProg; } m_applyFog; class { public: RenderTargetHandle m_rt; } m_runCtx; ///< Run context. void run(const RenderingContext& ctx, RenderPassWorkContext& rgraphCtx); void getDebugRenderTarget([[maybe_unused]] CString rtName, Array& handles, [[maybe_unused]] DebugRenderTargetDrawStyle& drawStyle) const override { handles[0] = m_runCtx.m_rt; drawStyle = DebugRenderTargetDrawStyle::kTonemap; } }; /// @} } // end namespace anki