TransformState.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include "TransformState.h"
  2. namespace Rml {
  3. bool TransformState::SetTransform(const Matrix4f* in_transform)
  4. {
  5. bool is_changed = (have_transform != (bool)in_transform);
  6. if (in_transform)
  7. {
  8. is_changed |= (have_transform && transform != *in_transform);
  9. transform = *in_transform;
  10. have_transform = true;
  11. }
  12. else
  13. have_transform = false;
  14. if (is_changed)
  15. dirty_inverse_transform = true;
  16. return is_changed;
  17. }
  18. bool TransformState::SetLocalPerspective(const Matrix4f* in_perspective)
  19. {
  20. bool is_changed = (have_perspective != (bool)in_perspective);
  21. if (in_perspective)
  22. {
  23. is_changed |= (have_perspective && local_perspective != *in_perspective);
  24. local_perspective = *in_perspective;
  25. have_perspective = true;
  26. }
  27. else
  28. have_perspective = false;
  29. return is_changed;
  30. }
  31. const Matrix4f* TransformState::GetTransform() const
  32. {
  33. return have_transform ? &transform : nullptr;
  34. }
  35. const Matrix4f* TransformState::GetLocalPerspective() const
  36. {
  37. return have_perspective ? &local_perspective : nullptr;
  38. }
  39. const Matrix4f* TransformState::GetInverseTransform() const
  40. {
  41. if (!have_transform)
  42. return nullptr;
  43. if (dirty_inverse_transform)
  44. {
  45. inverse_transform = transform;
  46. have_inverse_transform = inverse_transform.Invert();
  47. dirty_inverse_transform = false;
  48. }
  49. if (have_inverse_transform)
  50. return &inverse_transform;
  51. return nullptr;
  52. }
  53. } // namespace Rml