SceneProcessingModule.cpp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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 <AzCore/Module/Module.h>
  9. #include <AzCore/Module/DynamicModuleHandle.h>
  10. #include <AzFramework/Metrics/MetricsPlainTextNameRegistration.h>
  11. #include <SceneBuilder/SceneBuilderComponent.h>
  12. #include <SceneBuilder/SceneSerializationHandler.h>
  13. #include <Config/Components/SceneProcessingConfigSystemComponent.h>
  14. #include <Config/Components/SoftNameBehavior.h>
  15. #include <Config/Widgets/GraphTypeSelector.h>
  16. #include <Generation/Components/TangentGenerator/TangentGenerateComponent.h>
  17. #include <Generation/Components/TangentGenerator/TangentPreExportComponent.h>
  18. #include <Generation/Components/MeshOptimizer/MeshOptimizerComponent.h>
  19. #include <Source/SceneProcessingModule.h>
  20. namespace AZ
  21. {
  22. namespace SceneProcessing
  23. {
  24. class SceneProcessingModule
  25. : public Module
  26. {
  27. public:
  28. AZ_RTTI(SceneProcessingModule, "{13DCFEF2-BB25-4DBB-A69B-22958CAD6885}", Module);
  29. SceneProcessingModule()
  30. : Module()
  31. {
  32. LoadSceneModule(s_sceneCoreModule, "SceneCore");
  33. LoadSceneModule(s_sceneDataModule, "SceneData");
  34. LoadSceneModule(s_sceneBuilderModule, "SceneBuilder");
  35. m_descriptors.insert(m_descriptors.end(),
  36. {
  37. SceneProcessingConfig::SceneProcessingConfigSystemComponent::CreateDescriptor(),
  38. SceneProcessingConfig::SoftNameBehavior::CreateDescriptor(),
  39. SceneBuilder::BuilderPluginComponent::CreateDescriptor(),
  40. SceneBuilder::SceneSerializationHandler::CreateDescriptor(),
  41. AZ::SceneGenerationComponents::TangentPreExportComponent::CreateDescriptor(),
  42. AZ::SceneGenerationComponents::TangentGenerateComponent::CreateDescriptor(),
  43. AZ::SceneGenerationComponents::MeshOptimizerComponent::CreateDescriptor(),
  44. });
  45. // 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.
  46. // IF YOU ARE A THIRDPARTY WRITING A GEM, DO NOT REGISTER YOUR COMPONENTS WITH EditorMetricsComponentRegistrationBus
  47. AZStd::vector<AZ::Uuid> typeIds;
  48. typeIds.reserve(m_descriptors.size());
  49. for (AZ::ComponentDescriptor* descriptor : m_descriptors)
  50. {
  51. typeIds.emplace_back(descriptor->GetUuid());
  52. }
  53. AzFramework::MetricsPlainTextNameRegistrationBus::Broadcast(&AzFramework::MetricsPlainTextNameRegistrationBus::Events::RegisterForNameSending, typeIds);
  54. }
  55. ~SceneProcessingModule()
  56. {
  57. UnloadModule(s_sceneBuilderModule);
  58. UnloadModule(s_sceneDataModule);
  59. UnloadModule(s_sceneCoreModule);
  60. }
  61. AZ::ComponentTypeList GetRequiredSystemComponents() const override
  62. {
  63. return AZ::ComponentTypeList
  64. {
  65. azrtti_typeid<SceneProcessingConfig::SceneProcessingConfigSystemComponent>(),
  66. };
  67. }
  68. void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
  69. {
  70. provided.push_back(AZ_CRC("SceneConfiguration", 0x2a3785fb));
  71. }
  72. void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
  73. {
  74. incompatible.push_back(AZ_CRC("SceneConfiguration", 0x2a3785fb));
  75. }
  76. protected:
  77. void LoadSceneModule(AZStd::unique_ptr<DynamicModuleHandle>& module, const char* name)
  78. {
  79. if (!module)
  80. {
  81. module = DynamicModuleHandle::Create(name);
  82. if (module)
  83. {
  84. module->Load(false);
  85. auto init = module->GetFunction<InitializeDynamicModuleFunction>(InitializeDynamicModuleFunctionName);
  86. if (init)
  87. {
  88. (*init)();
  89. }
  90. }
  91. }
  92. }
  93. void UnloadModule(AZStd::unique_ptr<DynamicModuleHandle>& module)
  94. {
  95. if (module)
  96. {
  97. auto uninit = module->GetFunction<UninitializeDynamicModuleFunction>(UninitializeDynamicModuleFunctionName);
  98. if (uninit)
  99. {
  100. (*uninit)();
  101. }
  102. module.reset();
  103. }
  104. }
  105. };
  106. } // namespace SceneProcessing
  107. } // namespace AZ
  108. AZ_DECLARE_MODULE_CLASS(Gem_SceneProcessing, AZ::SceneProcessing::SceneProcessingModule)