00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef SCOPED_PHYS_XLOCK_H
00012
00013 #define SCOPED_PHYS_XLOCK_H
00014
00015 #include "foundation/PxPreprocessor.h"
00016 #include "ApexDefs.h"
00017
00018
00019 #include "PxScene.h"
00020 #include "Scene.h"
00021
00022 namespace nvidia
00023 {
00024 namespace apex
00025 {
00026
00034 class ScopedPhysXLockRead
00035 {
00036 public:
00037
00044 ScopedPhysXLockRead(nvidia::Scene* scene, const char *fileName, int lineno) : mApexScene(scene), mPhysXScene(0)
00045 {
00046 if (mApexScene)
00047 {
00048 mApexScene->lockRead(fileName, (uint32_t)lineno);
00049 }
00050 }
00051
00058 ScopedPhysXLockRead(physx::PxScene* scene, const char *fileName, int lineno) : mPhysXScene(scene), mApexScene(0)
00059 {
00060 if (mPhysXScene)
00061 {
00062 mPhysXScene->lockRead(fileName, (uint32_t)lineno);
00063 }
00064 }
00065
00066 ~ScopedPhysXLockRead()
00067 {
00068 if (mApexScene)
00069 {
00070 mApexScene->unlockRead();
00071 }
00072 if (mPhysXScene)
00073 {
00074 mPhysXScene->unlockRead();
00075 }
00076 }
00077 private:
00078 nvidia::Scene* mApexScene;
00079 physx::PxScene* mPhysXScene;
00080 };
00081
00088 class ScopedPhysXLockWrite
00089 {
00090 public:
00097 ScopedPhysXLockWrite(nvidia::Scene *scene, const char *fileName, int lineno) : mApexScene(scene), mPhysXScene(0)
00098 {
00099 if (mApexScene)
00100 {
00101 mApexScene->lockWrite(fileName, (uint32_t)lineno);
00102 }
00103 }
00104
00111 ScopedPhysXLockWrite(physx::PxScene *scene, const char *fileName, int lineno) : mPhysXScene(scene), mApexScene(0)
00112 {
00113 if (mPhysXScene)
00114 {
00115 mPhysXScene->lockWrite(fileName, (uint32_t)lineno);
00116 }
00117 }
00118
00119 ~ScopedPhysXLockWrite()
00120 {
00121 if (mApexScene)
00122 {
00123 mApexScene->unlockWrite();
00124 }
00125 if (mPhysXScene)
00126 {
00127 mPhysXScene->unlockWrite();
00128 }
00129 }
00130 private:
00131 nvidia::Scene* mApexScene;
00132 physx::PxScene* mPhysXScene;
00133 };
00134 }
00135 }
00136
00137
00138 #if defined(_DEBUG) || PX_CHECKED
00139
00142 #define SCOPED_PHYSX_LOCK_WRITE(x) nvidia::apex::ScopedPhysXLockWrite _wlock(x,__FILE__,__LINE__);
00143 #else
00144
00147 #define SCOPED_PHYSX_LOCK_WRITE(x) nvidia::apex::ScopedPhysXLockWrite _wlock(x,"",0);
00148 #endif
00149
00150 #if defined(_DEBUG) || PX_CHECKED
00151
00154 #define SCOPED_PHYSX_LOCK_READ(x) nvidia::apex::ScopedPhysXLockRead _rlock(x,__FILE__,__LINE__);
00155 #else
00156
00159 #define SCOPED_PHYSX_LOCK_READ(x) nvidia::apex::ScopedPhysXLockRead _rlock(x,"",0);
00160 #endif
00161
00162
00163
00164 #endif