Scale.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. namespace anki {
  8. /// @addtogroup renderer
  9. /// @{
  10. /// Upscales, sharpens and in some cases tonemaps.
  11. class Scale : public RendererObject
  12. {
  13. public:
  14. Error init();
  15. void populateRenderGraph(RenderingContext& ctx);
  16. /// This is the tonemapped, upscaled and sharpened RT.
  17. RenderTargetHandle getTonemappedRt() const
  18. {
  19. return m_runCtx.m_sharpenedRt;
  20. }
  21. /// This is the HDR upscaled RT. It's available if hasUscaledHdrRt() returns true.
  22. RenderTargetHandle getUpscaledHdrRt() const
  23. {
  24. ANKI_ASSERT(hasUpscaledHdrRt());
  25. return m_runCtx.m_upscaledHdrRt;
  26. }
  27. /// @see getUpscaledHdrRt.
  28. Bool hasUpscaledHdrRt() const
  29. {
  30. return m_runCtx.m_upscaledHdrRt.isValid();
  31. }
  32. Bool getUsingGrUpscaler() const
  33. {
  34. return m_grUpscaler.isCreated();
  35. }
  36. private:
  37. ShaderProgramResourcePtr m_scaleProg;
  38. ShaderProgramPtr m_scaleGrProg;
  39. ShaderProgramResourcePtr m_sharpenProg;
  40. ShaderProgramPtr m_sharpenGrProg;
  41. ShaderProgramResourcePtr m_tonemapProg;
  42. ShaderProgramPtr m_tonemapGrProg;
  43. GrUpscalerPtr m_grUpscaler;
  44. RenderTargetDesc m_upscaleAndSharpenRtDescr;
  45. RenderTargetDesc m_tonemapedRtDescr;
  46. enum class UpscalingMethod : U8
  47. {
  48. kNone,
  49. kBilinear,
  50. kFsr,
  51. kGr,
  52. kCount
  53. };
  54. UpscalingMethod m_upscalingMethod = UpscalingMethod::kNone;
  55. enum class SharpenMethod : U8
  56. {
  57. kNone,
  58. kRcas,
  59. kCount
  60. };
  61. SharpenMethod m_sharpenMethod = SharpenMethod::kNone;
  62. Bool m_neeedsTonemapping = false;
  63. class
  64. {
  65. public:
  66. RenderTargetHandle m_upscaledTonemappedRt;
  67. RenderTargetHandle m_upscaledHdrRt;
  68. RenderTargetHandle m_tonemappedRt;
  69. RenderTargetHandle m_sharpenedRt; ///< It's tonemaped.
  70. } m_runCtx;
  71. void runFsrOrBilinearScaling(RenderPassWorkContext& rgraphCtx);
  72. void runRcasSharpening(RenderPassWorkContext& rgraphCtx);
  73. void runGrUpscaling(RenderingContext& ctx, RenderPassWorkContext& rgraphCtx);
  74. void runTonemapping(RenderPassWorkContext& rgraphCtx);
  75. };
  76. /// @}
  77. } // end namespace anki