GeomNodesBus.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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 <AzCore/EBus/EBus.h>
  10. #include <AzCore/std/smart_ptr/unique_ptr.h>
  11. // This is similar to the WhiteBox implementation
  12. namespace GeomNodes
  13. {
  14. class GNRenderMeshInterface;
  15. //! Function object alias for creating a GNRenderMeshInterface.
  16. //! @note Used by SetGNRenderMeshInterfaceBuilder in GeomNodesRequests.
  17. using GNRenderMeshInterfaceBuilderFn = AZStd::function<AZStd::unique_ptr<GNRenderMeshInterface>(AZ::EntityId)>;
  18. //! system level requests.
  19. class GeomNodesRequests : public AZ::EBusTraits
  20. {
  21. public:
  22. // EBusTraits overrides ...
  23. static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single;
  24. static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
  25. //! Create a render mesh for use with geometry nodes data.
  26. virtual AZStd::unique_ptr<GNRenderMeshInterface> CreateGNRenderMeshInterface(AZ::EntityId) = 0;
  27. //! Control what concrete implementation of GNRenderMeshInterface CreateGNRenderMeshInterface returns.
  28. virtual void SetGNRenderMeshInterfaceBuilder(GNRenderMeshInterfaceBuilderFn builder) = 0;
  29. protected:
  30. ~GeomNodesRequests() = default;
  31. };
  32. using WhiteBoxRequestBus = AZ::EBus<GeomNodesRequests>;
  33. } // namespace GeomNodes