GBuffer.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <AnKi/Renderer/RendererObject.h>
  7. #include <AnKi/Renderer/Utils/GpuVisibility.h>
  8. #include <AnKi/Gr.h>
  9. namespace anki {
  10. /// @addtogroup renderer
  11. /// @{
  12. ANKI_CVAR(BoolCVar, Render, VisualizeGiProbes, false, "Visualize GI probes")
  13. ANKI_CVAR(BoolCVar, Render, VisualizeReflectionProbes, false, "Visualize reflection probes")
  14. /// G buffer stage. It populates the G buffer
  15. class GBuffer : public RendererObject
  16. {
  17. public:
  18. GBuffer()
  19. {
  20. registerDebugRenderTarget("GBufferNormals");
  21. registerDebugRenderTarget("GBufferAlbedo");
  22. registerDebugRenderTarget("GBufferVelocity");
  23. registerDebugRenderTarget("GBufferRoughness");
  24. registerDebugRenderTarget("GBufferMetallic");
  25. registerDebugRenderTarget("GBufferSubsurface");
  26. registerDebugRenderTarget("GBufferEmission");
  27. }
  28. ~GBuffer();
  29. Error init();
  30. void importRenderTargets(RenderingContext& ctx);
  31. /// Populate the rendergraph.
  32. void populateRenderGraph(RenderingContext& ctx);
  33. RenderTargetHandle getColorRt(U idx) const
  34. {
  35. return m_runCtx.m_colorRts[idx];
  36. }
  37. RenderTargetHandle getDepthRt() const
  38. {
  39. return m_runCtx.m_crntFrameDepthRt;
  40. }
  41. RenderTargetHandle getPreviousFrameDepthRt() const
  42. {
  43. return m_runCtx.m_prevFrameDepthRt;
  44. }
  45. const RenderTargetHandle& getHzbRt() const
  46. {
  47. return m_runCtx.m_hzbRt;
  48. }
  49. void getDebugRenderTarget(CString rtName, Array<RenderTargetHandle, U32(DebugRenderTargetRegister::kCount)>& handles,
  50. DebugRenderTargetDrawStyle& drawStyle) const override;
  51. /// Returns a buffer with indices of the visible AABBs. Used in debug drawing.
  52. const GpuVisibilityOutput& getVisibilityOutput() const
  53. {
  54. return m_runCtx.m_visOut;
  55. }
  56. private:
  57. Array<RenderTargetDesc, kGBufferColorRenderTargetCount> m_colorRtDescrs;
  58. Array<TexturePtr, 2> m_depthRts;
  59. TexturePtr m_hzbRt;
  60. ShaderProgramResourcePtr m_visualizeProbeProg;
  61. ShaderProgramPtr m_visualizeGiProbeGrProg;
  62. ShaderProgramPtr m_visualizeReflProbeGrProg;
  63. class
  64. {
  65. public:
  66. Array<RenderTargetHandle, kGBufferColorRenderTargetCount> m_colorRts;
  67. RenderTargetHandle m_crntFrameDepthRt;
  68. RenderTargetHandle m_prevFrameDepthRt;
  69. RenderTargetHandle m_hzbRt;
  70. GpuVisibilityOutput m_visOut;
  71. } m_runCtx;
  72. };
  73. /// @}
  74. } // end namespace anki