UseTextureFunctorSourceData.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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 "./UseTextureFunctorSourceData.h"
  9. #include <Atom/RPI.Reflect/Shader/ShaderOptionGroupLayout.h>
  10. #include <AzCore/Serialization/SerializeContext.h>
  11. #include <Atom/RPI.Reflect/Material/MaterialNameContext.h>
  12. namespace AZ
  13. {
  14. namespace Render
  15. {
  16. void UseTextureFunctorSourceData::Reflect(ReflectContext* context)
  17. {
  18. if (auto* serializeContext = azrtti_cast<SerializeContext*>(context))
  19. {
  20. serializeContext->Class<UseTextureFunctorSourceData>()
  21. ->Version(6)
  22. ->Field("textureProperty", &UseTextureFunctorSourceData::m_texturePropertyName)
  23. ->Field("useTextureProperty", &UseTextureFunctorSourceData::m_useTexturePropertyName)
  24. ->Field("dependentProperties", &UseTextureFunctorSourceData::m_dependentProperties)
  25. ->Field("shaderOption", &UseTextureFunctorSourceData::m_useTextureOptionName)
  26. ;
  27. }
  28. }
  29. AZStd::vector<AZ::Name> UseTextureFunctorSourceData::GetShaderOptionDependencies() const
  30. {
  31. AZStd::vector<AZ::Name> options;
  32. options.push_back(m_useTextureOptionName);
  33. return options;
  34. }
  35. RPI::MaterialFunctorSourceData::FunctorResult UseTextureFunctorSourceData::CreateFunctor(const RuntimeContext& context) const
  36. {
  37. using namespace RPI;
  38. RPI::Ptr<UseTextureFunctor> functor = aznew UseTextureFunctor;
  39. functor->m_texturePropertyIndex = context.FindMaterialPropertyIndex(m_texturePropertyName);
  40. if (functor->m_texturePropertyIndex.IsNull())
  41. {
  42. return Failure();
  43. }
  44. AddMaterialPropertyDependency(functor, functor->m_texturePropertyIndex);
  45. for (const Name& name : m_dependentProperties)
  46. {
  47. MaterialPropertyIndex index = context.FindMaterialPropertyIndex(name);
  48. if (index.IsNull())
  49. {
  50. return Failure();
  51. }
  52. functor->m_dependentPropertyIndexes.push_back(index);
  53. }
  54. functor->m_useTexturePropertyIndex = context.FindMaterialPropertyIndex(m_useTexturePropertyName);
  55. if (functor->m_useTexturePropertyIndex.IsNull())
  56. {
  57. return Failure();
  58. }
  59. AddMaterialPropertyDependency(functor, functor->m_useTexturePropertyIndex);
  60. functor->m_useTextureOptionName = m_useTextureOptionName;
  61. context.GetNameContext()->ContextualizeShaderOption(functor->m_useTextureOptionName);
  62. return Success(Ptr<MaterialFunctor>(functor));
  63. }
  64. RPI::MaterialFunctorSourceData::FunctorResult UseTextureFunctorSourceData::CreateFunctor(const EditorContext& context) const
  65. {
  66. using namespace RPI;
  67. RPI::Ptr<UseTextureFunctor> functor = aznew UseTextureFunctor;
  68. functor->m_texturePropertyIndex = context.FindMaterialPropertyIndex(m_texturePropertyName);
  69. if (functor->m_texturePropertyIndex.IsNull())
  70. {
  71. return Failure();
  72. }
  73. AddMaterialPropertyDependency(functor, functor->m_texturePropertyIndex);
  74. for (const Name& name : m_dependentProperties)
  75. {
  76. MaterialPropertyIndex index = context.FindMaterialPropertyIndex(name);
  77. if (index.IsNull())
  78. {
  79. return Failure();
  80. }
  81. functor->m_dependentPropertyIndexes.push_back(index);
  82. }
  83. functor->m_useTexturePropertyIndex = context.FindMaterialPropertyIndex(m_useTexturePropertyName);
  84. if (functor->m_useTexturePropertyIndex.IsNull())
  85. {
  86. return Failure();
  87. }
  88. AddMaterialPropertyDependency(functor, functor->m_useTexturePropertyIndex);
  89. return Success(Ptr<MaterialFunctor>(functor));
  90. }
  91. } // namespace Render
  92. } // namespace AZ