// 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 #include namespace anki { /// @addtogroup renderer /// @{ ANKI_CVAR(BoolCVar, Render, VisualizeGiProbes, false, "Visualize GI probes") ANKI_CVAR(BoolCVar, Render, VisualizeReflectionProbes, false, "Visualize reflection probes") /// G buffer stage. It populates the G buffer class GBuffer : public RendererObject { public: GBuffer() { registerDebugRenderTarget("GBufferNormals"); registerDebugRenderTarget("GBufferAlbedo"); registerDebugRenderTarget("GBufferVelocity"); registerDebugRenderTarget("GBufferRoughness"); registerDebugRenderTarget("GBufferMetallic"); registerDebugRenderTarget("GBufferSubsurface"); registerDebugRenderTarget("GBufferEmission"); } ~GBuffer(); Error init(); void importRenderTargets(RenderingContext& ctx); /// Populate the rendergraph. void populateRenderGraph(RenderingContext& ctx); RenderTargetHandle getColorRt(U idx) const { return m_runCtx.m_colorRts[idx]; } RenderTargetHandle getDepthRt() const { return m_runCtx.m_crntFrameDepthRt; } RenderTargetHandle getPreviousFrameDepthRt() const { return m_runCtx.m_prevFrameDepthRt; } const RenderTargetHandle& getHzbRt() const { return m_runCtx.m_hzbRt; } void getDebugRenderTarget(CString rtName, Array& handles, DebugRenderTargetDrawStyle& drawStyle) const override; /// Returns a buffer with indices of the visible AABBs. Used in debug drawing. const GpuVisibilityOutput& getVisibilityOutput() const { return m_runCtx.m_visOut; } private: Array m_colorRtDescrs; Array m_depthRts; TexturePtr m_hzbRt; ShaderProgramResourcePtr m_visualizeProbeProg; ShaderProgramPtr m_visualizeGiProbeGrProg; ShaderProgramPtr m_visualizeReflProbeGrProg; class { public: Array m_colorRts; RenderTargetHandle m_crntFrameDepthRt; RenderTargetHandle m_prevFrameDepthRt; RenderTargetHandle m_hzbRt; GpuVisibilityOutput m_visOut; } m_runCtx; }; /// @} } // end namespace anki