SceneProcessingModule.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0 OR MIT
  5. *
  6. */
  7. #include <AzCore/Module/Module.h>
  8. #include <AzCore/Module/DynamicModuleHandle.h>
  9. #include <AzFramework/Metrics/MetricsPlainTextNameRegistration.h>
  10. #include <SceneBuilder/SceneBuilderComponent.h>
  11. #include <SceneBuilder/SceneSerializationHandler.h>
  12. #include <Config/Components/SceneProcessingConfigSystemComponent.h>
  13. #include <Config/Components/SoftNameBehavior.h>
  14. #include <Config/Widgets/GraphTypeSelector.h>
  15. #include <Generation/Components/TangentGenerator/TangentGenerateComponent.h>
  16. #include <Generation/Components/TangentGenerator/TangentPreExportComponent.h>
  17. #include <Generation/Components/MeshOptimizer/MeshOptimizerComponent.h>
  18. #include <Source/SceneProcessingModule.h>
  19. namespace AZ
  20. {
  21. namespace SceneProcessing
  22. {
  23. class SceneProcessingModule
  24. : public Module
  25. {
  26. public:
  27. AZ_RTTI(SceneProcessingModule, "{13DCFEF2-BB25-4DBB-A69B-22958CAD6885}", Module);
  28. SceneProcessingModule()
  29. : Module()
  30. {
  31. LoadSceneModule(s_sceneCoreModule, "SceneCore");
  32. LoadSceneModule(s_sceneDataModule, "SceneData");
  33. LoadSceneModule(s_sceneBuilderModule, "SceneBuilder");
  34. m_descriptors.insert(m_descriptors.end(),
  35. {
  36. SceneProcessingConfig::SceneProcessingConfigSystemComponent::CreateDescriptor(),
  37. SceneProcessingConfig::SoftNameBehavior::CreateDescriptor(),
  38. SceneBuilder::BuilderPluginComponent::CreateDescriptor(),
  39. SceneBuilder::SceneSerializationHandler::CreateDescriptor(),
  40. AZ::SceneGenerationComponents::TangentPreExportComponent::CreateDescriptor(),
  41. AZ::SceneGenerationComponents::TangentGenerateComponent::CreateDescriptor(),
  42. AZ::SceneGenerationComponents::MeshOptimizerComponent::CreateDescriptor(),
  43. });
  44. // This is an internal Amazon gem, so register it's components for metrics tracking, otherwise the name of the component won't get sent back.
  45. // IF YOU ARE A THIRDPARTY WRITING A GEM, DO NOT REGISTER YOUR COMPONENTS WITH EditorMetricsComponentRegistrationBus
  46. AZStd::vector<AZ::Uuid> typeIds;
  47. typeIds.reserve(m_descriptors.size());
  48. for (AZ::ComponentDescriptor* descriptor : m_descriptors)
  49. {
  50. typeIds.emplace_back(descriptor->GetUuid());
  51. }
  52. AzFramework::MetricsPlainTextNameRegistrationBus::Broadcast(&AzFramework::MetricsPlainTextNameRegistrationBus::Events::RegisterForNameSending, typeIds);
  53. }
  54. ~SceneProcessingModule()
  55. {
  56. UnloadModule(s_sceneBuilderModule);
  57. UnloadModule(s_sceneDataModule);
  58. UnloadModule(s_sceneCoreModule);
  59. }
  60. AZ::ComponentTypeList GetRequiredSystemComponents() const override
  61. {
  62. return AZ::ComponentTypeList
  63. {
  64. azrtti_typeid<SceneProcessingConfig::SceneProcessingConfigSystemComponent>(),
  65. };
  66. }
  67. void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
  68. {
  69. provided.push_back(AZ_CRC("SceneConfiguration", 0x2a3785fb));
  70. }
  71. void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
  72. {
  73. incompatible.push_back(AZ_CRC("SceneConfiguration", 0x2a3785fb));
  74. }
  75. protected:
  76. void LoadSceneModule(AZStd::unique_ptr<DynamicModuleHandle>& module, const char* name)
  77. {
  78. if (!module)
  79. {
  80. module = DynamicModuleHandle::Create(name);
  81. if (module)
  82. {
  83. module->Load(false);
  84. auto init = module->GetFunction<InitializeDynamicModuleFunction>(InitializeDynamicModuleFunctionName);
  85. if (init)
  86. {
  87. (*init)(AZ::Environment::GetInstance());
  88. }
  89. }
  90. }
  91. }
  92. void UnloadModule(AZStd::unique_ptr<DynamicModuleHandle>& module)
  93. {
  94. if (module)
  95. {
  96. auto uninit = module->GetFunction<UninitializeDynamicModuleFunction>(UninitializeDynamicModuleFunctionName);
  97. if (uninit)
  98. {
  99. (*uninit)();
  100. }
  101. module.reset();
  102. }
  103. }
  104. };
  105. } // namespace SceneProcessing
  106. } // namespace AZ
  107. AZ_DECLARE_MODULE_CLASS(Gem_SceneProcessing, AZ::SceneProcessing::SceneProcessingModule)