3
0

MaterialSystem.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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 <Atom/RPI.Public/Material/Material.h>
  9. #include <Atom/RPI.Public/Material/MaterialSystem.h>
  10. #include <Atom/RPI.Reflect/Material/MaterialAsset.h>
  11. #include <Atom/RPI.Reflect/Material/MaterialFunctor.h>
  12. #include <Atom/RPI.Reflect/Material/MaterialPropertiesLayout.h>
  13. #include <Atom/RPI.Reflect/Material/LuaMaterialFunctor.h>
  14. #include <AtomCore/Instance/InstanceDatabase.h>
  15. namespace AZ
  16. {
  17. namespace RPI
  18. {
  19. void MaterialSystem::Reflect(AZ::ReflectContext* context)
  20. {
  21. MaterialPropertyValue::Reflect(context);
  22. MaterialTypeAsset::Reflect(context);
  23. MaterialAsset::Reflect(context);
  24. MaterialPropertiesLayout::Reflect(context);
  25. MaterialFunctor::Reflect(context);
  26. MaterialNameContext::Reflect(context);
  27. LuaMaterialFunctor::Reflect(context);
  28. ReflectMaterialDynamicMetadata(context);
  29. }
  30. void MaterialSystem::GetAssetHandlers(AssetHandlerPtrList& assetHandlers)
  31. {
  32. assetHandlers.emplace_back(MakeAssetHandler<MaterialTypeAssetHandler>());
  33. assetHandlers.emplace_back(MakeAssetHandler<MaterialAssetHandler>());
  34. }
  35. void MaterialSystem::Init()
  36. {
  37. AZ::Data::InstanceHandler<Material> handler;
  38. handler.m_createFunction = [](Data::AssetData* materialAsset)
  39. {
  40. return Material::CreateInternal(*(azrtti_cast<MaterialAsset*>(materialAsset)));
  41. };
  42. Data::InstanceDatabase<Material>::Create(azrtti_typeid<MaterialAsset>(), handler);
  43. }
  44. void MaterialSystem::Shutdown()
  45. {
  46. Data::InstanceDatabase<Material>::Destroy();
  47. }
  48. } // namespace RPI
  49. } // namespace AZ