00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef SCENE_H
00013 #define SCENE_H
00014
00020 #include "ApexDesc.h"
00021 #include "Renderable.h"
00022 #include "RenderDebugInterface.h"
00023 #include "Context.h"
00024 #include "foundation/PxVec3.h"
00025 #include <ApexDefs.h>
00026
00027 #if PX_PHYSICS_VERSION_MAJOR == 3
00028 #include "PxFiltering.h"
00029 #endif
00030 #include "MirrorScene.h"
00031
00032 namespace NvParameterized
00033 {
00034 class Interface;
00035 }
00036
00037 namespace physx
00038 {
00039 class PxBaseTask;
00040 class PxTaskManager;
00041 class PxCpuDispatcher;
00042 class PxGpuDispatcher;
00043 }
00044
00045 namespace nvidia
00046 {
00047 namespace apex
00048 {
00049
00050 class DestructibleActor;
00051
00052 PX_PUSH_PACK_DEFAULT
00053
00054 #if PX_PHYSICS_VERSION_MAJOR == 3
00055
00058 class PhysX3Interface
00059 {
00060 public:
00066 virtual void setContactReportFlags(PxShape* shape, physx::PxPairFlags flags, DestructibleActor* actor, uint16_t actorChunkIndex) = 0;
00067
00072 virtual physx::PxPairFlags getContactReportFlags(const physx::PxShape* shape) const = 0;
00073 };
00074 #endif
00075
00079 class SceneDesc : public ApexDesc
00080 {
00081 public:
00082
00083 PX_INLINE SceneDesc() : ApexDesc()
00084 {
00085 init();
00086 }
00087
00088 PX_INLINE void setToDefault()
00089 {
00090 ApexDesc::setToDefault();
00091 init();
00092 }
00093
00094
00101 PxScene* scene;
00102
00105 RenderDebugInterface* debugInterface;
00106
00107 #if PX_PHYSICS_VERSION_MAJOR == 0
00108
00115 PxCpuDispatcher* cpuDispatcher;
00116
00123 PxGpuDispatcher* gpuDispatcher;
00124
00125 #elif PX_PHYSICS_VERSION_MAJOR == 3
00126
00129 PhysX3Interface* physX3Interface;
00130
00131 #endif
00132
00139 bool useDebugRenderable;
00140
00144 bool debugVisualizeRemotely;
00145
00149 bool debugVisualizeLocally;
00150
00154 bool useCuda;
00155
00156 private:
00157 PX_INLINE void init()
00158 {
00159 #if PX_PHYSICS_VERSION_MAJOR == 0
00160 cpuDispatcher = 0;
00161 gpuDispatcher = 0;
00162 #elif PX_PHYSICS_VERSION_MAJOR == 3
00163 physX3Interface = 0;
00164 #endif
00165 scene = 0;
00166 debugInterface = 0;
00167 useDebugRenderable = false;
00168 debugVisualizeRemotely = false;
00169 debugVisualizeLocally = true;
00170 #if APEX_CUDA_SUPPORT
00171 useCuda = true;
00172 #else
00173 useCuda = false;
00174 #endif
00175 }
00176 };
00177
00178
00182 struct StatDataType
00183 {
00187 enum Enum
00188 {
00189 INVALID = 0,
00190 STRING = 1,
00191 INT = 2,
00192 FLOAT = 3,
00193 ENUM = 4,
00194 BOOL = 5,
00195 };
00196 };
00197
00201 typedef struct oaValueStruct
00202 {
00203 union
00204 {
00205 char* String;
00206 int32_t Int;
00207 float Float;
00208 char* Enum;
00209 bool Bool;
00210 };
00211 } StatValue;
00212
00216 typedef struct
00217 {
00219 const char* StatName;
00220
00222 StatDataType::Enum StatType;
00223
00225 StatValue StatCurrentValue;
00226 } StatsInfo;
00227
00231 struct SceneStats
00232 {
00235 uint32_t numApexStats;
00238 StatsInfo* ApexStatsInfoPtr;
00239 };
00240
00249 struct ViewMatrixType
00250 {
00254 enum Enum
00255 {
00256 USER_CUSTOMIZED = 0,
00257 LOOK_AT_RH,
00258 LOOK_AT_LH,
00259 };
00260 };
00261
00268 struct ProjMatrixType
00269 {
00273 enum Enum
00274 {
00275 USER_CUSTOMIZED = 0,
00276 };
00277 };
00278
00282 struct UserBoundingBoxFlags
00283 {
00287 enum Enum
00288 {
00289 NONE = 1 << 0,
00290 ENTER = 1 << 1,
00291 LEAVE = 1 << 2
00292 };
00293 };
00294
00298 class Scene : public Renderable, public Context, public ApexInterface
00299 {
00300 public:
00301
00302 #if PX_PHYSICS_VERSION_MAJOR == 3
00303
00311 virtual void setPhysXScene(PxScene* s) = 0;
00312
00316 virtual PxScene* getPhysXScene() const = 0;
00317
00318 #endif
00319
00323 virtual const SceneStats* getStats(void) const = 0;
00324
00351 virtual void simulate(float elapsedTime,
00352 bool finalStep = true,
00353 PxBaseTask *completionTask = NULL,
00354 void* scratchMemBlock = 0,
00355 uint32_t scratchMemBlockSize = 0) = 0;
00356
00366 virtual bool fetchResults(bool block, uint32_t* errorState) = 0;
00367
00371 virtual const PxRenderBuffer* getRenderBuffer() const = 0;
00372
00376 virtual const PxRenderBuffer* getRenderBufferScreenSpace() const = 0;
00377
00384 virtual bool checkResults(bool block) const = 0;
00385
00399 virtual uint32_t allocViewMatrix(ViewMatrixType::Enum) = 0;
00400
00413 virtual uint32_t allocProjMatrix(ProjMatrixType::Enum) = 0;
00414
00418 virtual uint32_t getNumViewMatrices() const = 0;
00419
00423 virtual uint32_t getNumProjMatrices() const = 0;
00424
00432 virtual void setViewMatrix(const PxMat44& viewTransform, const uint32_t viewID = 0) = 0;
00433
00439 virtual PxMat44 getViewMatrix(const uint32_t viewID = 0) const = 0;
00440
00447 virtual void setProjMatrix(const PxMat44& projTransform, const uint32_t projID = 0) = 0;
00448
00454 virtual PxMat44 getProjMatrix(const uint32_t projID = 0) const = 0;
00455
00459 virtual void setUseViewProjMatrix(const uint32_t viewID = 0, const uint32_t projID = 0) = 0;
00460
00466 virtual void setViewParams(const PxVec3& eyePosition, const PxVec3& eyeDirection, const PxVec3& worldUpDirection = PxVec3(0, 1, 0), const uint32_t viewID = 0) = 0;
00467
00473 virtual void setProjParams(float nearPlaneDistance, float farPlaneDistance, float fieldOfViewDegree, uint32_t viewportWidth, uint32_t viewportHeight, const uint32_t projID = 0) = 0;
00474
00481 virtual PxVec3 getEyePosition(const uint32_t viewID = 0) const = 0;
00482
00489 virtual PxVec3 getEyeDirection(const uint32_t viewID = 0) const = 0;
00490
00494 virtual PxTaskManager* getTaskManager() const = 0;
00495
00499 virtual void setUseDebugRenderable(bool state) = 0;
00500
00504 virtual ::NvParameterized::Interface* getDebugRenderParams() const = 0;
00505
00509 virtual ::NvParameterized::Interface* getModuleDebugRenderParams(const char* name) const = 0;
00510
00514 virtual PxVec3 getGravity() const = 0;
00515
00519 virtual void setGravity(const PxVec3& gravity) = 0;
00520
00521
00522 #if PX_PHYSICS_VERSION_MAJOR == 3
00523
00531 virtual void lockRead(const char *fileName,uint32_t lineo) = 0;
00532
00541 virtual void lockWrite(const char *fileName,uint32_t lineno) = 0;
00542
00546 virtual void unlockRead() = 0;
00547
00551 virtual void unlockWrite() = 0;
00552
00565 virtual void addActorPair(PxActor *actor0,PxActor *actor1) = 0;
00566
00573 virtual void removeActorPair(PxActor *actor0,PxActor *actor1) = 0;
00574
00586 virtual bool findActorPair(PxActor *actor0,PxActor *actor1) const = 0;
00587
00588
00599 virtual MirrorScene *createMirrorScene(nvidia::apex::Scene &mirrorScene,
00600 MirrorScene::MirrorFilter &mirrorFilter,
00601 float mirrorStaticDistance,
00602 float mirrorDynamicDistance,
00603 float mirrorRefreshDistance) = 0;
00604 #endif
00605
00606
00615 virtual void addBoundingBox(const PxBounds3& bounds, UserBoundingBoxFlags::Enum flags) = 0;
00616
00623 virtual const PxBounds3 getBoundingBox(const uint32_t index) const = 0;
00624
00631 virtual UserBoundingBoxFlags::Enum getBoundingBoxFlags(const uint32_t index) const = 0;
00632
00636 virtual uint32_t getBoundingBoxCount() const = 0;
00637
00643 virtual void removeBoundingBox(const uint32_t index) = 0;
00644
00648 virtual void removeAllBoundingBoxes() = 0;
00649
00653 virtual void* getCudaTestManager() const = 0;
00654
00658 virtual void* getCudaProfileManager() const = 0;
00659
00665 virtual void setCudaKernelCheckEnabled(bool enabled) = 0;
00666
00670 virtual bool getCudaKernelCheckEnabled() const = 0;
00671
00672 #if APEX_UE4
00673
00676 virtual void updateGravity() = 0;
00677 #endif
00678 };
00679
00680
00681 PX_POP_PACK
00682
00683 }
00684 }
00685
00686 #endif // SCENE_H