PreviewRendererCaptureState.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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 <PreviewRenderer/PreviewRenderer.h>
  9. #include <PreviewRenderer/PreviewRendererCaptureState.h>
  10. namespace AtomToolsFramework
  11. {
  12. PreviewRendererCaptureState::PreviewRendererCaptureState(PreviewRenderer* renderer)
  13. : PreviewRendererState(renderer)
  14. {
  15. m_renderer->PoseContent();
  16. }
  17. PreviewRendererCaptureState::~PreviewRendererCaptureState()
  18. {
  19. AZ::Render::FrameCaptureNotificationBus::Handler::BusDisconnect();
  20. m_renderer->EndCapture();
  21. }
  22. void PreviewRendererCaptureState::Update()
  23. {
  24. if (m_captureComplete)
  25. {
  26. AZ::Render::FrameCaptureNotificationBus::Handler::BusDisconnect();
  27. m_renderer->CompleteCaptureRequest();
  28. return;
  29. }
  30. if (AZStd::chrono::steady_clock::now() > m_abortTime)
  31. {
  32. AZ::Render::FrameCaptureNotificationBus::Handler::BusDisconnect();
  33. m_renderer->CancelCaptureRequest();
  34. return;
  35. }
  36. if (AZStd::chrono::steady_clock::now() > m_captureTime)
  37. {
  38. if (!AZ::Render::FrameCaptureNotificationBus::Handler::BusIsConnected())
  39. {
  40. // if the start capture call fails the capture will be retried next tick.
  41. const AZ::Render::FrameCaptureId frameCaptureId = m_renderer->StartCapture();
  42. if (frameCaptureId != AZ::Render::InvalidFrameCaptureId)
  43. {
  44. AZ::Render::FrameCaptureNotificationBus::Handler::BusConnect(frameCaptureId);
  45. }
  46. }
  47. }
  48. }
  49. void PreviewRendererCaptureState::OnFrameCaptureFinished(
  50. [[maybe_unused]] AZ::Render::FrameCaptureResult result, [[maybe_unused]] const AZStd::string& info)
  51. {
  52. AZ::Render::FrameCaptureNotificationBus::Handler::BusDisconnect();
  53. m_captureComplete = true;
  54. }
  55. } // namespace AtomToolsFramework