ReflectionScreenSpacePass.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include "ReflectionScreenSpacePass.h"
  9. #include <Atom/RPI.Public/RenderPipeline.h>
  10. #include <Atom/RPI.Public/Scene.h>
  11. #include <SpecularReflections/SpecularReflectionsFeatureProcessor.h>
  12. namespace AZ
  13. {
  14. namespace Render
  15. {
  16. RPI::Ptr<ReflectionScreenSpacePass> ReflectionScreenSpacePass::Create(const RPI::PassDescriptor& descriptor)
  17. {
  18. RPI::Ptr<ReflectionScreenSpacePass> pass = aznew ReflectionScreenSpacePass(descriptor);
  19. return AZStd::move(pass);
  20. }
  21. ReflectionScreenSpacePass::ReflectionScreenSpacePass(const RPI::PassDescriptor& descriptor)
  22. : RPI::ParentPass(descriptor)
  23. {
  24. }
  25. bool ReflectionScreenSpacePass::IsEnabled() const
  26. {
  27. if (!ParentPass::IsEnabled())
  28. {
  29. return false;
  30. }
  31. RPI::Scene* scene = m_pipeline->GetScene();
  32. if (!scene)
  33. {
  34. return false;
  35. }
  36. SpecularReflectionsFeatureProcessor* specularReflectionsFeatureProcessor = scene->GetFeatureProcessor<SpecularReflectionsFeatureProcessor>();
  37. if (!specularReflectionsFeatureProcessor)
  38. {
  39. return false;
  40. }
  41. // delay for a few frames to ensure that the previous frame texture is populated
  42. static const uint32_t FrameDelay = 10;
  43. if (m_frameDelayCount < FrameDelay)
  44. {
  45. m_frameDelayCount++;
  46. return false;
  47. }
  48. return true;
  49. }
  50. } // namespace RPI
  51. } // namespace AZ