| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
- // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
- // SPDX-License-Identifier: MIT
- #pragma once
- #ifdef JPH_ENABLE_ASSERTS
- JPH_NAMESPACE_BEGIN
- class JPH_EXPORT BodyAccess
- {
- public:
- /// Access rules, used to detect race conditions during simulation
- enum class EAccess : uint8
- {
- None = 0,
- Read = 1,
- ReadWrite = 3,
- };
- /// Grant a scope specific access rights on the current thread
- class Grant
- {
- public:
- inline Grant(EAccess inVelocity, EAccess inPosition)
- {
- EAccess &velocity = sVelocityAccess();
- EAccess &position = sPositionAccess();
- JPH_ASSERT(velocity == EAccess::ReadWrite);
- JPH_ASSERT(position == EAccess::ReadWrite);
- velocity = inVelocity;
- position = inPosition;
- }
- inline ~Grant()
- {
- sVelocityAccess() = EAccess::ReadWrite;
- sPositionAccess() = EAccess::ReadWrite;
- }
- };
- /// Check if we have permission
- static inline bool sCheckRights(EAccess inRights, EAccess inDesiredRights)
- {
- return (uint8(inRights) & uint8(inDesiredRights)) == uint8(inDesiredRights);
- }
- /// Access to read/write velocities
- static inline EAccess & sVelocityAccess()
- {
- static thread_local EAccess sAccess = BodyAccess::EAccess::ReadWrite;
- return sAccess;
- }
- /// Access to read/write positions
- static inline EAccess & sPositionAccess()
- {
- static thread_local EAccess sAccess = BodyAccess::EAccess::ReadWrite;
- return sAccess;
- }
- };
- JPH_NAMESPACE_END
- #endif // JPH_ENABLE_ASSERTS
|