1//
2// Redistribution and use in source and binary forms, with or without
3// modification, are permitted provided that the following conditions
4// are met:
5// * Redistributions of source code must retain the above copyright
6// notice, this list of conditions and the following disclaimer.
7// * Redistributions in binary form must reproduce the above copyright
8// notice, this list of conditions and the following disclaimer in the
9// documentation and/or other materials provided with the distribution.
10// * Neither the name of NVIDIA CORPORATION nor the names of its
11// contributors may be used to endorse or promote products derived
12// from this software without specific prior written permission.
13//
14// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
15// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25//
26// Copyright (c) 2008-2021 NVIDIA Corporation. All rights reserved.
27// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
28// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
29
30
31#ifndef PX_PHYSICS_NX_SCENELOCK
32#define PX_PHYSICS_NX_SCENELOCK
33/** \addtogroup physics
34@{
35*/
36
37#include "PxPhysXConfig.h"
38#include "PxScene.h"
39
40#if !PX_DOXYGEN
41namespace physx
42{
43#endif
44
45/**
46\brief RAII wrapper for the PxScene read lock.
47
48Use this class as follows to lock the scene for reading by the current thread
49for the duration of the enclosing scope:
50
51 PxSceneReadLock lock(sceneRef);
52
53\see PxScene::lockRead(), PxScene::unlockRead(), PxSceneFlag::eREQUIRE_RW_LOCK
54*/
55class PxSceneReadLock
56{
57 PxSceneReadLock(const PxSceneReadLock&);
58 PxSceneReadLock& operator=(const PxSceneReadLock&);
59
60public:
61
62 /**
63 \brief Constructor
64 \param scene The scene to lock for reading
65 \param file Optional string for debugging purposes
66 \param line Optional line number for debugging purposes
67 */
68 PxSceneReadLock(PxScene& scene, const char* file=NULL, PxU32 line=0)
69 : mScene(scene)
70 {
71 mScene.lockRead(file, line);
72 }
73
74 ~PxSceneReadLock()
75 {
76 mScene.unlockRead();
77 }
78
79private:
80
81 PxScene& mScene;
82};
83
84/**
85\brief RAII wrapper for the PxScene write lock.
86
87Use this class as follows to lock the scene for writing by the current thread
88for the duration of the enclosing scope:
89
90 PxSceneWriteLock lock(sceneRef);
91
92\see PxScene::lockWrite(), PxScene::unlockWrite(), PxSceneFlag::eREQUIRE_RW_LOCK
93*/
94class PxSceneWriteLock
95{
96 PxSceneWriteLock(const PxSceneWriteLock&);
97 PxSceneWriteLock& operator=(const PxSceneWriteLock&);
98
99public:
100
101 /**
102 \brief Constructor
103 \param scene The scene to lock for writing
104 \param file Optional string for debugging purposes
105 \param line Optional line number for debugging purposes
106 */
107 PxSceneWriteLock(PxScene& scene, const char* file=NULL, PxU32 line=0)
108 : mScene(scene)
109 {
110 mScene.lockWrite(file, line);
111 }
112
113 ~PxSceneWriteLock()
114 {
115 mScene.unlockWrite();
116 }
117
118private:
119
120 PxScene& mScene;
121};
122
123
124#if !PX_DOXYGEN
125} // namespace physx
126#endif
127
128/** @} */
129#endif
130

source code of qtquick3dphysics/src/3rdparty/PhysX/include/PxSceneLock.h