ImportContextRegistryManager.cpp 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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 "ImportContextRegistryManager.h"
  9. #include <SceneAPI/SceneBuilder/ImportContexts/AssImpImportContextProvider.h>
  10. namespace AZ
  11. {
  12. namespace SceneAPI
  13. {
  14. namespace SceneBuilder
  15. {
  16. ImportContextRegistryManager::ImportContextRegistryManager() = default;
  17. ImportContextRegistryManager::~ImportContextRegistryManager() = default;
  18. void ImportContextRegistryManager::RegisterContextProvider(ImportContextProvider* provider)
  19. {
  20. if (provider)
  21. {
  22. m_importContextProviders.push_back(AZStd::unique_ptr<ImportContextProvider>(provider));
  23. }
  24. }
  25. void ImportContextRegistryManager::UnregisterContextProvider(ImportContextProvider* provider)
  26. {
  27. AZ_TracePrintf("SceneAPI", "Unregistered ImportContextProvider %s", provider->GetImporterName().data());
  28. for (auto it = m_importContextProviders.begin(); it != m_importContextProviders.end(); ++it)
  29. {
  30. if (it->get() == provider)
  31. {
  32. m_importContextProviders.erase(it);
  33. break; // Assuming only one instance can be registered at a time
  34. }
  35. }
  36. }
  37. ImportContextProvider* ImportContextRegistryManager::SelectImportProvider(AZStd::string_view fileExtension) const
  38. {
  39. AZ_TracePrintf(
  40. "SceneAPI",
  41. "Matching ImportContextProvider (registered %d) suitable for extension: %.*s",
  42. m_importContextProviders.size(),
  43. static_cast<int>(fileExtension.length()),
  44. fileExtension.data());
  45. // search in reverse order since the default AssImp Provider can handle all extenstions
  46. for (auto it = m_importContextProviders.rbegin(); it != m_importContextProviders.rend(); ++it)
  47. {
  48. if (it->get()->CanHandleExtension(fileExtension))
  49. {
  50. return it->get();
  51. }
  52. AZ_TracePrintf(
  53. "SceneAPI",
  54. "Importer %s cannot handle %.*s, skipping",
  55. it->get()->GetImporterName().data(),
  56. static_cast<int>(fileExtension.length()),
  57. fileExtension.data());
  58. }
  59. return nullptr; // No provider found
  60. }
  61. } // namespace SceneBuilder
  62. } // namespace SceneAPI
  63. } // namespace AZ