AuxGeomFeatureProcessor.h 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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/RPI.Public/AuxGeom/AuxGeomFeatureProcessorInterface.h>
  10. namespace AZ
  11. {
  12. namespace Render
  13. {
  14. class AuxGeomDrawQueue;
  15. class DynamicPrimitiveProcessor;
  16. class FixedShapeProcessor;
  17. /**
  18. * FeatureProcessor for Auxiliary Geometry
  19. */
  20. class AuxGeomFeatureProcessor final
  21. : public RPI::AuxGeomFeatureProcessorInterface
  22. {
  23. public: // functions
  24. AZ_CLASS_ALLOCATOR(AuxGeomFeatureProcessor, AZ::SystemAllocator)
  25. AZ_RTTI(AZ::Render::AuxGeomFeatureProcessor, "{75E17417-C8E3-4B64-8469-7662D1E0904A}", AZ::RPI::AuxGeomFeatureProcessorInterface);
  26. AZ_FEATURE_PROCESSOR(AuxGeomFeatureProcessor);
  27. static void Reflect(AZ::ReflectContext* context);
  28. AuxGeomFeatureProcessor() = default;
  29. virtual ~AuxGeomFeatureProcessor() = default;
  30. // RPI::FeatureProcessor
  31. void Activate() override;
  32. void Deactivate() override;
  33. void Render(const FeatureProcessor::RenderPacket& fpPacket) override;
  34. void OnRenderEnd() override;
  35. // RPI::AuxGeomFeatureProcessorInterface
  36. RPI::AuxGeomDrawPtr GetDrawQueue() override; // returns the scene DrawQueue
  37. RPI::AuxGeomDrawPtr GetDrawQueueForView(const RPI::View* view) override;
  38. RPI::AuxGeomDrawPtr GetOrCreateDrawQueueForView(const RPI::View* view) override;
  39. void ReleaseDrawQueueForView(const RPI::View* view) override;
  40. // RPI::SceneNotificationBus::Handler overrides...
  41. void OnRenderPipelineChanged(AZ::RPI::RenderPipeline* pipeline, RPI::SceneNotification::RenderPipelineChangeType changeType) override;
  42. private: // functions
  43. AuxGeomFeatureProcessor(const AuxGeomFeatureProcessor&) = delete;
  44. void OnSceneRenderPipelinesChanged();
  45. private: // data
  46. static const char* s_featureProcessorName;
  47. //! Cache a pointer to the AuxGeom draw queue for our scene
  48. RPI::AuxGeomDrawPtr m_sceneDrawQueue = nullptr;
  49. //! Map used to store the AuxGeomDrawQueue for each view
  50. AZStd::map<const RPI::View*, RPI::AuxGeomDrawPtr> m_viewDrawDataMap; // using View* as key to not hold a reference to the view
  51. //! The object that handles the dynamic primitive geometry data
  52. AZStd::unique_ptr<DynamicPrimitiveProcessor> m_dynamicPrimitiveProcessor;
  53. //! The object that handles fixed shape geometry data
  54. AZStd::unique_ptr<FixedShapeProcessor> m_fixedShapeProcessor;
  55. };
  56. inline RPI::AuxGeomDrawPtr AuxGeomFeatureProcessor::GetDrawQueue()
  57. {
  58. return m_sceneDrawQueue;
  59. }
  60. } // namespace Render
  61. } // namespace AZ