00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef SCOPED_PHYS_XLOCK_H
00030
00031 #define SCOPED_PHYS_XLOCK_H
00032
00033 #include "foundation/PxPreprocessor.h"
00034 #include "ApexDefs.h"
00035
00036
00037 #include "PxScene.h"
00038 #include "Scene.h"
00039
00040 namespace nvidia
00041 {
00042 namespace apex
00043 {
00044
00052 class ScopedPhysXLockRead
00053 {
00054 public:
00055
00062 ScopedPhysXLockRead(nvidia::Scene* scene, const char *fileName, int lineno) : mApexScene(scene), mPhysXScene(0)
00063 {
00064 if (mApexScene)
00065 {
00066 mApexScene->lockRead(fileName, (uint32_t)lineno);
00067 }
00068 }
00069
00076 ScopedPhysXLockRead(physx::PxScene* scene, const char *fileName, int lineno) : mPhysXScene(scene), mApexScene(0)
00077 {
00078 if (mPhysXScene)
00079 {
00080 mPhysXScene->lockRead(fileName, (uint32_t)lineno);
00081 }
00082 }
00083
00084 ~ScopedPhysXLockRead()
00085 {
00086 if (mApexScene)
00087 {
00088 mApexScene->unlockRead();
00089 }
00090 if (mPhysXScene)
00091 {
00092 mPhysXScene->unlockRead();
00093 }
00094 }
00095 private:
00096 nvidia::Scene* mApexScene;
00097 physx::PxScene* mPhysXScene;
00098 };
00099
00106 class ScopedPhysXLockWrite
00107 {
00108 public:
00115 ScopedPhysXLockWrite(nvidia::Scene *scene, const char *fileName, int lineno) : mApexScene(scene), mPhysXScene(0)
00116 {
00117 if (mApexScene)
00118 {
00119 mApexScene->lockWrite(fileName, (uint32_t)lineno);
00120 }
00121 }
00122
00129 ScopedPhysXLockWrite(physx::PxScene *scene, const char *fileName, int lineno) : mPhysXScene(scene), mApexScene(0)
00130 {
00131 if (mPhysXScene)
00132 {
00133 mPhysXScene->lockWrite(fileName, (uint32_t)lineno);
00134 }
00135 }
00136
00137 ~ScopedPhysXLockWrite()
00138 {
00139 if (mApexScene)
00140 {
00141 mApexScene->unlockWrite();
00142 }
00143 if (mPhysXScene)
00144 {
00145 mPhysXScene->unlockWrite();
00146 }
00147 }
00148 private:
00149 nvidia::Scene* mApexScene;
00150 physx::PxScene* mPhysXScene;
00151 };
00152 }
00153 }
00154
00155
00156 #if defined(_DEBUG) || PX_CHECKED
00157
00160 #define SCOPED_PHYSX_LOCK_WRITE(x) nvidia::apex::ScopedPhysXLockWrite _wlock(x,__FILE__,__LINE__);
00161 #else
00162
00165 #define SCOPED_PHYSX_LOCK_WRITE(x) nvidia::apex::ScopedPhysXLockWrite _wlock(x,"",0);
00166 #endif
00167
00168 #if defined(_DEBUG) || PX_CHECKED
00169
00172 #define SCOPED_PHYSX_LOCK_READ(x) nvidia::apex::ScopedPhysXLockRead _rlock(x,__FILE__,__LINE__);
00173 #else
00174
00177 #define SCOPED_PHYSX_LOCK_READ(x) nvidia::apex::ScopedPhysXLockRead _rlock(x,"",0);
00178 #endif
00179
00180
00181
00182 #endif