BodyAccess.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #pragma once
  5. #ifdef JPH_ENABLE_ASSERTS
  6. JPH_NAMESPACE_BEGIN
  7. class BodyAccess
  8. {
  9. public:
  10. /// Access rules, used to detect race conditions during simulation
  11. enum class EAccess : uint8
  12. {
  13. None = 0,
  14. Read = 1,
  15. ReadWrite = 3,
  16. };
  17. /// Grant a scope specific access rights on the current thread
  18. class Grant
  19. {
  20. public:
  21. inline Grant(EAccess inVelocity, EAccess inPosition)
  22. {
  23. JPH_ASSERT(sVelocityAccess == EAccess::ReadWrite);
  24. JPH_ASSERT(sPositionAccess == EAccess::ReadWrite);
  25. sVelocityAccess = inVelocity;
  26. sPositionAccess = inPosition;
  27. }
  28. inline ~Grant()
  29. {
  30. sVelocityAccess = EAccess::ReadWrite;
  31. sPositionAccess = EAccess::ReadWrite;
  32. }
  33. };
  34. /// Check if we have permission
  35. static bool sCheckRights(EAccess inRights, EAccess inDesiredRights)
  36. {
  37. return (uint8(inRights) & uint8(inDesiredRights)) == uint8(inDesiredRights);
  38. }
  39. // Various permissions that can be granted
  40. static thread_local EAccess sVelocityAccess;
  41. static thread_local EAccess sPositionAccess;
  42. };
  43. JPH_NAMESPACE_END
  44. #endif // JPH_ENABLE_ASSERTS