IndirectDiffuse.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // Copyright (C) 2009-2022, 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. registerDebugRenderTarget("IndirectDiffuseVrsSri");
  21. }
  22. ~IndirectDiffuse();
  23. Error init();
  24. void populateRenderGraph(RenderingContext& ctx);
  25. void getDebugRenderTarget(CString rtName, Array<RenderTargetHandle, kMaxDebugRenderTargets>& handles,
  26. ShaderProgramPtr& optionalShaderProgram) const override;
  27. RenderTargetHandle getRt() const
  28. {
  29. return m_runCtx.m_mainRtHandles[WRITE];
  30. }
  31. private:
  32. Array<TexturePtr, 2> m_rts;
  33. Bool m_rtsImportedOnce = false;
  34. static constexpr U32 READ = 0;
  35. static constexpr U32 WRITE = 1;
  36. class
  37. {
  38. public:
  39. ShaderProgramResourcePtr m_prog;
  40. ShaderProgramPtr m_grProg;
  41. RenderTargetDescription m_rtHandle;
  42. ShaderProgramResourcePtr m_visualizeProg;
  43. ShaderProgramPtr m_visualizeGrProg;
  44. U32 m_sriTexelDimension = 16;
  45. } m_vrs;
  46. class
  47. {
  48. public:
  49. ShaderProgramResourcePtr m_prog;
  50. ShaderProgramPtr m_grProg;
  51. FramebufferDescription m_fbDescr;
  52. } m_main;
  53. class
  54. {
  55. public:
  56. ShaderProgramResourcePtr m_prog;
  57. Array<ShaderProgramPtr, 2> m_grProgs;
  58. FramebufferDescription m_fbDescr;
  59. } m_denoise;
  60. class
  61. {
  62. public:
  63. RenderTargetHandle m_sriRt;
  64. Array<RenderTargetHandle, 2> m_mainRtHandles;
  65. } m_runCtx;
  66. Error initInternal();
  67. };
  68. /// @}
  69. } // namespace anki