3
0

Transform2DFunctor.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 "./Transform2DFunctor.h"
  9. #include <Atom/RPI.Public/Material/Material.h>
  10. #include <Atom/RPI.Public/Shader/ShaderResourceGroup.h>
  11. namespace AZ
  12. {
  13. namespace Render
  14. {
  15. void Transform2DFunctor::Reflect(ReflectContext* context)
  16. {
  17. if (auto* serializeContext = azrtti_cast<SerializeContext*>(context))
  18. {
  19. serializeContext->Enum<TransformType>()
  20. ->Value("Scale", TransformType::Scale)
  21. ->Value("Rotate", TransformType::Rotate)
  22. ->Value("Translate", TransformType::Translate)
  23. ;
  24. serializeContext->Class<Transform2DFunctor, RPI::MaterialFunctor>()
  25. ->Version(2)
  26. ->Field("transformOrder", &Transform2DFunctor::m_transformOrder)
  27. ->Field("center", &Transform2DFunctor::m_center)
  28. ->Field("scale", &Transform2DFunctor::m_scale)
  29. ->Field("scaleX", &Transform2DFunctor::m_scaleX)
  30. ->Field("scaleY", &Transform2DFunctor::m_scaleY)
  31. ->Field("translateX", &Transform2DFunctor::m_translateX)
  32. ->Field("translateY", &Transform2DFunctor::m_translateY)
  33. ->Field("rotateDegrees", &Transform2DFunctor::m_rotateDegrees)
  34. ->Field("transformMatrix", &Transform2DFunctor::m_transformMatrix)
  35. ->Field("transformMatrixInverse", &Transform2DFunctor::m_transformMatrixInverse)
  36. ;
  37. }
  38. }
  39. void Transform2DFunctor::Process(RPI::MaterialFunctorAPI::RuntimeContext& context)
  40. {
  41. using namespace RPI;
  42. UvTransformDescriptor desc;
  43. desc.m_center = context.GetMaterialPropertyValue<Vector2>(m_center);
  44. desc.m_scale = context.GetMaterialPropertyValue<float>(m_scale);
  45. desc.m_scaleX = context.GetMaterialPropertyValue<float>(m_scaleX);
  46. desc.m_scaleY = context.GetMaterialPropertyValue<float>(m_scaleY);
  47. desc.m_translateX = context.GetMaterialPropertyValue<float>(m_translateX);
  48. desc.m_translateY = context.GetMaterialPropertyValue<float>(m_translateY);
  49. desc.m_rotateDegrees = context.GetMaterialPropertyValue<float>(m_rotateDegrees);
  50. Matrix3x3 transform = CreateUvTransformMatrix(desc, m_transformOrder);
  51. context.GetShaderResourceGroup()->SetConstant(m_transformMatrix, transform);
  52. // There are some cases where the matrix is required but the inverse is not, so the SRG only has the regular matrix.
  53. // In that case, the.materialtype file will not provide the name of an inverse matrix because it doesn't have one.
  54. if (m_transformMatrixInverse.IsValid())
  55. {
  56. context.GetShaderResourceGroup()->SetConstant(m_transformMatrixInverse, transform.GetInverseFull());
  57. }
  58. }
  59. } // namespace Render
  60. } // namespace AZ