IndirectDiffuse.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. /// @addtogroup renderer
  11. /// @{
  12. /// Global illumination.
  13. class IndirectDiffuse : public RendererObject
  14. {
  15. public:
  16. IndirectDiffuse(Renderer* r)
  17. : RendererObject(r)
  18. {
  19. registerDebugRenderTarget("IndirectDiffuse");
  20. }
  21. ~IndirectDiffuse();
  22. ANKI_USE_RESULT Error init(const ConfigSet& cfg);
  23. void populateRenderGraph(RenderingContext& ctx);
  24. void getDebugRenderTarget(CString rtName, RenderTargetHandle& handle,
  25. ShaderProgramPtr& optionalShaderProgram) const override
  26. {
  27. ANKI_ASSERT(rtName == "IndirectDiffuse");
  28. handle = m_runCtx.m_mainRtHandles[WRITE];
  29. }
  30. RenderTargetHandle getRt() const
  31. {
  32. return m_runCtx.m_mainRtHandles[WRITE];
  33. }
  34. private:
  35. Array<TexturePtr, 2> m_rts;
  36. Bool m_rtsImportedOnce = false;
  37. static constexpr U32 READ = 0;
  38. static constexpr U32 WRITE = 1;
  39. class
  40. {
  41. public:
  42. ShaderProgramResourcePtr m_prog;
  43. ShaderProgramPtr m_grProg;
  44. F32 m_radius;
  45. U32 m_sampleCount = 8;
  46. F32 m_ssaoStrength = 2.5f;
  47. F32 m_ssaoBias = -0.1f;
  48. } m_main;
  49. class
  50. {
  51. public:
  52. ShaderProgramResourcePtr m_prog;
  53. Array<ShaderProgramPtr, 2> m_grProgs;
  54. F32 m_sampleCount = 1.0f;
  55. } m_denoise;
  56. class
  57. {
  58. public:
  59. Array<RenderTargetHandle, 2> m_mainRtHandles;
  60. } m_runCtx;
  61. ANKI_USE_RESULT Error initInternal(const ConfigSet& cfg);
  62. };
  63. /// @}
  64. } // namespace anki