ReflectionCopyFrameBufferPass.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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 "ReflectionCopyFrameBufferPass.h"
  9. #include "ReflectionScreenSpaceTracePass.h"
  10. #include <Atom/RPI.Public/Pass/PassSystemInterface.h>
  11. #include <Atom/RPI.Public/Pass/PassFilter.h>
  12. namespace AZ
  13. {
  14. namespace Render
  15. {
  16. RPI::Ptr<ReflectionCopyFrameBufferPass> ReflectionCopyFrameBufferPass::Create(const RPI::PassDescriptor& descriptor)
  17. {
  18. RPI::Ptr<ReflectionCopyFrameBufferPass> pass = aznew ReflectionCopyFrameBufferPass(descriptor);
  19. return AZStd::move(pass);
  20. }
  21. ReflectionCopyFrameBufferPass::ReflectionCopyFrameBufferPass(const RPI::PassDescriptor& descriptor)
  22. : RPI::FullscreenTrianglePass(descriptor)
  23. {
  24. }
  25. void ReflectionCopyFrameBufferPass::BuildInternal()
  26. {
  27. RPI::PassFilter passFilter = RPI::PassFilter::CreateWithPassName(AZ::Name("ReflectionScreenSpaceTracePass"), GetRenderPipeline());
  28. RPI::PassSystemInterface::Get()->ForEachPass(passFilter, [this](RPI::Pass* pass) -> RPI::PassFilterExecutionFlow
  29. {
  30. Render::ReflectionScreenSpaceTracePass* tracePass = azrtti_cast<ReflectionScreenSpaceTracePass*>(pass);
  31. Data::Instance<RPI::AttachmentImage>& frameBufferAttachment = tracePass->GetPreviousFrameImageAttachment();
  32. RPI::PassAttachmentBinding& outputBinding = GetOutputBinding(0);
  33. AttachImageToSlot(outputBinding.m_name, frameBufferAttachment);
  34. return RPI::PassFilterExecutionFlow::StopVisitingPasses;
  35. });
  36. FullscreenTrianglePass::BuildInternal();
  37. }
  38. } // namespace RPI
  39. } // namespace AZ