AssImpImportContextProvider.h 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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 "ImportContextProvider.h"
  10. #include <AzCore/RTTI/RTTIMacros.h>
  11. #include <SceneAPI/SDKWrapper/AssImpNodeWrapper.h>
  12. #include <SceneAPI/SDKWrapper/AssImpSceneWrapper.h>
  13. #include <SceneAPI/SceneBuilder/ImportContexts/ImportContextProvider.h>
  14. namespace AZ
  15. {
  16. namespace SceneAPI
  17. {
  18. namespace SceneBuilder
  19. {
  20. // Concrete provider for creating AssImp-specific import classes.
  21. struct AssImpImportContextProvider : public ImportContextProvider
  22. {
  23. AZ_RTTI(AssImpImportContextProvider, "{6c263adb-e73c-4017-955a-9c212ded3637}");
  24. AssImpImportContextProvider() = default;
  25. ~AssImpImportContextProvider() override;
  26. AZStd::shared_ptr<NodeEncounteredContext> CreateNodeEncounteredContext(
  27. Containers::Scene& scene,
  28. Containers::SceneGraph::NodeIndex currentGraphPosition,
  29. const SceneSystem& sourceSceneSystem,
  30. RenamedNodesMap& nodeNameMap,
  31. SDKScene::SceneWrapperBase& sourceScene,
  32. SDKNode::NodeWrapper& sourceNode) override;
  33. AZStd::shared_ptr<SceneDataPopulatedContextBase> CreateSceneDataPopulatedContext(
  34. NodeEncounteredContext& parent,
  35. AZStd::shared_ptr<DataTypes::IGraphObject> graphData,
  36. const AZStd::string& dataName) override;
  37. AZStd::shared_ptr<SceneNodeAppendedContextBase> CreateSceneNodeAppendedContext(
  38. SceneDataPopulatedContextBase& parent, Containers::SceneGraph::NodeIndex newIndex) override;
  39. AZStd::shared_ptr<SceneAttributeDataPopulatedContextBase> CreateSceneAttributeDataPopulatedContext(
  40. SceneNodeAppendedContextBase& parent,
  41. AZStd::shared_ptr<DataTypes::IGraphObject> nodeData,
  42. const Containers::SceneGraph::NodeIndex attributeNodeIndex,
  43. const AZStd::string& dataName) override;
  44. AZStd::shared_ptr<SceneAttributeNodeAppendedContextBase> CreateSceneAttributeNodeAppendedContext(
  45. SceneAttributeDataPopulatedContextBase& parent, Containers::SceneGraph::NodeIndex newIndex) override;
  46. AZStd::shared_ptr<SceneNodeAddedAttributesContextBase> CreateSceneNodeAddedAttributesContext(
  47. SceneNodeAppendedContextBase& parent) override;
  48. AZStd::shared_ptr<SceneNodeFinalizeContextBase> CreateSceneNodeFinalizeContext(
  49. SceneNodeAddedAttributesContextBase& parent) override;
  50. AZStd::shared_ptr<FinalizeSceneContextBase> CreateFinalizeSceneContext(
  51. Containers::Scene& scene,
  52. const SceneSystem& sourceSceneSystem,
  53. SDKScene::SceneWrapperBase& sourceScene,
  54. RenamedNodesMap& nodeNameMap) override;
  55. bool CanHandleExtension(AZStd::string_view fileExtension) const override
  56. {
  57. // The AssImp is our default provider and returns true for all registered extensions.
  58. AZ_UNUSED(fileExtension);
  59. return true;
  60. }
  61. AZStd::unique_ptr<AZ::SDKScene::SceneWrapperBase> CreateSceneWrapper() const override
  62. {
  63. return AZStd::make_unique<AZ::AssImpSDKWrapper::AssImpSceneWrapper>();
  64. }
  65. AZStd::string GetImporterName() const override
  66. {
  67. return "AssImp";
  68. }
  69. };
  70. } // namespace SceneBuilder
  71. } // namespace SceneAPI
  72. } // namespace AZ