*/
#include <dali/dali.h>
-#include <dali/devel-api/threading/mutex.h>
#include <dali/devel-api/update/frame-callback-interface.h>
#include <dali/devel-api/update/update-proxy.h>
#include <dali-physics/public-api/physics-adaptor.h>
#include <functional>
+#include <mutex>
#include <queue>
namespace Dali::Toolkit::Physics::Internal
float GetTimestep();
/**
+ * Lock the mutex.
+ */
+ void Lock();
+
+ /**
+ * Unlock the mutex
+ */
+ void Unlock();
+
+ class ScopedLock
+ {
+ public:
+ ScopedLock(PhysicsWorld& world)
+ : mWorld(world)
+ {
+ mWorld.Lock();
+ }
+ ~ScopedLock()
+ {
+ mWorld.Unlock();
+ }
+ PhysicsWorld& mWorld;
+ };
+
+ /**
* Queue a function for execution in the update thread, prior to the physics integration.
* Enables syncronization of DALi properties and physics controlled properties.
*/
*
* @param[in] rayFromWorld The origin in physics world space
* @param[in] rayToWorld A point along the direction on the far side of the physics world
+ * @param[in] nativeFilter a native body / shape filter
* @param[out] localPivot The hit point local to the body
* @param[out] distanceFromCamera The distance of the pick point from the camera
* @return Empty value if no dynamic body found, otherwise a valid ptr to the hit body.
*/
- virtual Dali::Any HitTest(Dali::Vector3 rayFromWorld, Dali::Vector3 rayToWorld, Dali::Vector3& localPivot, float& distanceFromCamera) = 0;
+ virtual Dali::Any HitTest(Dali::Vector3 rayFromWorld, Dali::Vector3 rayToWorld, Dali::Any nativeFilter, Dali::Vector3& localPivot, float& distanceFromCamera) = 0;
/**
* @copydoc Dali::Toolkit::Physics::PhysicsAdaptor::SetIntegrationState
Physics::PhysicsAdaptor::DebugState GetDebugState();
public:
- Dali::Mutex& GetMutex(); // Only for use by adaptor in creating scoped accessor
-
bool OnUpdate(Dali::UpdateProxy& updateProxy, float elapsedSeconds);
protected:
virtual void Integrate(float timestep) = 0;
protected:
- Dali::Mutex mMutex;
+ std::mutex mMutex;
std::queue<std::function<void(void)>> commandQueue;
Dali::UpdateProxy::NotifySyncPoint mNotifySyncPoint{Dali::UpdateProxy::INVALID_SYNC};
Dali::CallbackBase* mUpdateCallback{nullptr};