Ssgi.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. // Copyright (C) 2009-2021, 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/Resource/ImageResource.h>
  8. #include <AnKi/Gr.h>
  9. namespace anki
  10. {
  11. /// @addtogroup renderer
  12. /// @{
  13. /// Screen space global illumination.
  14. class Ssgi : public RendererObject
  15. {
  16. public:
  17. Ssgi(Renderer* r)
  18. : RendererObject(r)
  19. {
  20. registerDebugRenderTarget("SSGI");
  21. }
  22. ~Ssgi();
  23. ANKI_USE_RESULT Error init(const ConfigSet& cfg);
  24. /// Populate the rendergraph.
  25. void populateRenderGraph(RenderingContext& ctx);
  26. RenderTargetHandle getRt() const
  27. {
  28. return m_runCtx.m_finalRt;
  29. }
  30. void getDebugRenderTarget(CString rtName, RenderTargetHandle& handle,
  31. ShaderProgramPtr& optionalShaderProgram) const override
  32. {
  33. ANKI_ASSERT(rtName == "SSGI");
  34. handle = m_runCtx.m_finalRt;
  35. }
  36. private:
  37. class
  38. {
  39. public:
  40. ShaderProgramResourcePtr m_prog;
  41. Array<ShaderProgramPtr, 4> m_grProg;
  42. RenderTargetDescription m_rtDescr;
  43. ImageResourcePtr m_noiseImage;
  44. U32 m_maxSteps = 32;
  45. U32 m_firstStepPixels = 16;
  46. U32 m_depthLod = 0;
  47. } m_main;
  48. class
  49. {
  50. public:
  51. ShaderProgramResourcePtr m_prog;
  52. Array2d<ShaderProgramPtr, 2, 4> m_grProg;
  53. } m_denoise;
  54. class
  55. {
  56. public:
  57. TexturePtr m_rt;
  58. ShaderProgramResourcePtr m_prog;
  59. Array<ShaderProgramPtr, 4> m_grProg;
  60. Bool m_rtImportedOnce = false;
  61. } m_recontruction;
  62. class
  63. {
  64. public:
  65. Array<RenderTargetHandle, 2> m_intermediateRts;
  66. RenderTargetHandle m_finalRt;
  67. RenderingContext* m_ctx = nullptr;
  68. } m_runCtx;
  69. ANKI_USE_RESULT Error initInternal(const ConfigSet& cfg);
  70. void run(RenderPassWorkContext& rgraphCtx);
  71. void runVBlur(RenderPassWorkContext& rgraphCtx);
  72. void runHBlur(RenderPassWorkContext& rgraphCtx);
  73. void runRecontruct(RenderPassWorkContext& rgraphCtx);
  74. };
  75. /// @}
  76. } // namespace anki