PreviewRenderer.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. #pragma once
  9. #include <Atom/Feature/Utils/FrameCaptureBus.h>
  10. #include <Atom/RPI.Public/Base.h>
  11. #include <Atom/RPI.Public/Pass/AttachmentReadback.h>
  12. #include <AtomToolsFramework/PreviewRenderer/PreviewContent.h>
  13. #include <AtomToolsFramework/PreviewRenderer/PreviewRendererCaptureRequest.h>
  14. #include <AtomToolsFramework/PreviewRenderer/PreviewRendererInterface.h>
  15. #include <AtomToolsFramework/PreviewRenderer/PreviewerFeatureProcessorProviderBus.h>
  16. #include <AzCore/Component/TickBus.h>
  17. #include <AzFramework/Entity/GameEntityContextComponent.h>
  18. #include <PreviewRenderer/PreviewRendererState.h>
  19. namespace AtomToolsFramework
  20. {
  21. //! Processes requests for setting up content that gets rendered to a texture and captured to an image
  22. class PreviewRenderer final
  23. : public PreviewRendererInterface
  24. , public PreviewerFeatureProcessorProviderBus::Handler
  25. , public AZ::SystemTickBus::Handler
  26. {
  27. public:
  28. AZ_CLASS_ALLOCATOR(PreviewRenderer, AZ::SystemAllocator);
  29. AZ_RTTI(PreviewRenderer, "{60FCB7AB-2A94-417A-8C5E-5B588D17F5D1}", PreviewRendererInterface);
  30. PreviewRenderer(const AZStd::string& sceneName, const AZStd::string& pipelineName);
  31. ~PreviewRenderer() override;
  32. void AddCaptureRequest(const PreviewRendererCaptureRequest& captureRequest) override;
  33. AZ::RPI::ScenePtr GetScene() const override;
  34. AZ::RPI::ViewPtr GetView() const override;
  35. AZ::Uuid GetEntityContextId() const override;
  36. void ProcessCaptureRequests();
  37. void CancelCaptureRequest();
  38. void CompleteCaptureRequest();
  39. void LoadContent();
  40. void UpdateLoadContent();
  41. void CancelLoadContent();
  42. void PoseContent();
  43. AZ::Render::FrameCaptureId StartCapture();
  44. void EndCapture();
  45. private:
  46. //! AZ::SystemTickBus::Handler interface overrides...
  47. void OnSystemTick() override;
  48. //! AZ::Render::PreviewerFeatureProcessorProviderBus::Handler interface overrides...
  49. void GetRequiredFeatureProcessors(AZStd::vector<AZStd::string>& featureProcessors) const override;
  50. static constexpr float AspectRatio = 1.0f;
  51. static constexpr float NearDist = 0.001f;
  52. static constexpr float FarDist = 100.0f;
  53. static constexpr float FieldOfView = AZ::Constants::HalfPi;
  54. AZ::RPI::ScenePtr m_scene;
  55. AZStd::shared_ptr<AzFramework::Scene> m_frameworkScene;
  56. AZ::RPI::RenderPipelinePtr m_renderPipeline;
  57. AZ::RPI::ViewPtr m_view;
  58. AZStd::vector<AZStd::string> m_passHierarchy;
  59. AZStd::unique_ptr<AzFramework::EntityContext> m_entityContext;
  60. //! Incoming requests are appended to this queue and processed one at a time in OnSystemTick function.
  61. AZStd::queue<PreviewRendererCaptureRequest> m_captureRequestQueue;
  62. PreviewRendererCaptureRequest m_currentCaptureRequest;
  63. AZStd::unique_ptr<PreviewRendererState> m_state;
  64. };
  65. } // namespace AtomToolsFramework