APEX Framework: ApexSDK.h Source File

NVIDIA APEX

ApexSDK.h
Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2008-2017, NVIDIA CORPORATION.  All rights reserved.
00003  *
00004  * NVIDIA CORPORATION and its licensors retain all intellectual property
00005  * and proprietary rights in and to this software, related documentation
00006  * and any modifications thereto.  Any use, reproduction, disclosure or
00007  * distribution of this software and related documentation without an express
00008  * license agreement from NVIDIA CORPORATION is strictly prohibited.
00009  */
00010 
00011 
00012 #ifndef APEX_SDK_H
00013 #define APEX_SDK_H
00014 
00020 #include "ApexDefs.h"
00021 #include "ApexUsingNamespace.h"
00022 #include "ApexDesc.h"
00023 #include "ApexInterface.h"
00024 
00025 #include "nvparameterized/NvSerializer.h"
00026 #include "nvparameterized/NvParameterized.h"
00027 #include "nvparameterized/NvParameterizedTraits.h"
00028 #include "Shape.h"
00029 
00030 
00031 namespace RENDER_DEBUG
00032 {
00033     class RenderDebugInterface;
00034 };
00035 
00036 namespace physx
00037 {
00038     class PxFoundation;
00039     class PxCpuDispatcher;
00040 
00041     namespace profile
00042     {
00043         class PxProfileZoneManager;
00044     }
00045     class PxPvd;
00046 }
00047 
00049 namespace nvidia
00050 {
00052 namespace apex
00053 {
00054 
00055 class UserRenderResourceManager;
00056 class Scene;
00057 class SceneDesc;
00058 class AssetPreviewScene;
00059 class RenderMeshAsset;
00060 class RenderMeshAssetAuthoring;
00061 class Module;
00062 class PhysXObjectDesc;
00063 class ResourceProvider;
00064 class ResourceCallback;
00065 class RenderDebugInterface;
00066 class Asset;
00067 class AssetAuthoring;
00068 class ApexSDKCachedData;
00069 class RenderMeshActor;
00070 
00071 PX_PUSH_PACK_DEFAULT
00072 
00076 class GroupsMask64
00077 {
00078 public:
00082     PX_INLINE GroupsMask64() 
00083     {
00084         bits0 = bits1 = 0;
00085     }
00086 
00090     PX_INLINE GroupsMask64(uint32_t b0, uint32_t b1) : bits0(b0), bits1(b1) {}
00091 
00095     PX_INLINE void setToDefault()
00096     {
00097         *this = GroupsMask64();
00098     }
00099 
00101     uint32_t        bits0;
00103     uint32_t        bits1;
00104 };
00105 
00109 struct GroupsFilterOp
00110 {
00114     enum Enum
00115     {
00116         AND,
00117         OR,
00118         XOR,
00119         NAND,
00120         NOR,
00121         NXOR,
00122         SWAP_AND
00123     };
00124 };
00125 
00129 typedef unsigned int AuthObjTypeID;
00130 
00134 class ApexSDKDesc : public ApexDesc
00135 {
00136 public:
00140     PxFoundation* foundation;
00141 
00149     uint32_t physXSDKVersion;
00150 
00151 #if PX_PHYSICS_VERSION_MAJOR == 3
00152 
00155     PxPhysics* physXSDK;
00156 
00160     PxCooking* cooking;
00161 #endif
00162 
00166     PxPvd*  pvd;
00167 
00171     UserRenderResourceManager* renderResourceManager;
00172 
00180     ResourceCallback* resourceCallback;
00181 
00188     const char* dllLoadPath;
00189 
00196     const char* wireframeMaterial;
00197 
00204     const char* solidShadedMaterial;
00205 
00215     bool renderMeshActorLoadMaterialsLazily;
00216 
00226     const char* dllNamePostfix;
00227 
00235     const char* appGuid;
00236 
00237 
00243     bool resourceProviderIsCaseSensitive;
00244 
00249     uint32_t physXObjDescTableAllocationIncrement;
00250 
00255     bool enableConcurrencyCheck;
00256 
00260     PX_INLINE ApexSDKDesc() : ApexDesc()
00261     {
00262         init();
00263     }
00264 
00268     PX_INLINE void setToDefault()
00269     {
00270         ApexDesc::setToDefault();
00271         init();
00272     }
00273 
00278     PX_INLINE bool isValid() const
00279     {
00280         bool retVal = ApexDesc::isValid();
00281 
00282         if (foundation == NULL)
00283         {
00284             return false;
00285         }
00286 #if PX_PHYSICS_VERSION_MAJOR == 3
00287         if (physXSDK == NULL)
00288         {
00289             return false;
00290         }
00291         if (cooking == NULL)
00292         {
00293             return false;
00294         }
00295         if (physXSDKVersion != PX_PHYSICS_VERSION)
00296         {
00297             return false;
00298         }
00299 #endif
00300         return retVal;
00301     }
00302 
00303 private:
00304     PX_INLINE void init()
00305     {
00306         renderResourceManager = NULL;
00307         foundation = NULL;
00308 #if PX_PHYSICS_VERSION_MAJOR == 3
00309         physXSDKVersion = PX_PHYSICS_VERSION;
00310         physXSDK = NULL;
00311         cooking = NULL;
00312 #endif
00313         pvd = NULL;
00314         resourceCallback = NULL;
00315         dllLoadPath = NULL;
00316         solidShadedMaterial = "ApexSolidShaded";
00317         wireframeMaterial = "ApexWireframe";
00318         renderMeshActorLoadMaterialsLazily = true;
00319         dllNamePostfix = NULL;
00320         appGuid = NULL;
00321         resourceProviderIsCaseSensitive = false;
00322         physXObjDescTableAllocationIncrement = 128;
00323         enableConcurrencyCheck = false;
00324     }
00325 };
00326 
00327 
00331 enum ApexCreateError
00332 {
00336     APEX_CE_NO_ERROR = 0,
00337 
00343     APEX_CE_NOT_FOUND = 1,
00344 
00348     APEX_CE_WRONG_VERSION = 2,
00349 
00353     APEX_CE_DESCRIPTOR_INVALID = 3,
00354 
00358     APEX_CE_CREATE_NO_ALLOWED = 4,
00359 
00360 };
00361 
00362 
00366 class ApexSDK : public ApexInterface
00367 {
00368 public:
00372     virtual Scene* createScene(const SceneDesc&) = 0;
00373 
00377     virtual void releaseScene(Scene*) = 0;
00378 
00382     virtual AssetPreviewScene* createAssetPreviewScene() = 0;
00383 
00387     virtual void releaseAssetPreviewScene(AssetPreviewScene* nxScene) = 0;
00388 
00392     virtual Module* createModule(const char* name, ApexCreateError* err = NULL) = 0;
00393 
00394 #if PX_PHYSICS_VERSION_MAJOR == 0
00395 
00401     virtual physx::PxCpuDispatcher* createCpuDispatcher(uint32_t numThreads = 0) = 0;
00405     virtual void releaseCpuDispatcher(physx::PxCpuDispatcher& cd) = 0;
00406 #endif
00407 
00408 #if PX_PHYSICS_VERSION_MAJOR == 3
00409 
00413     virtual const PhysXObjectDesc* getPhysXObjectInfo(const PxActor* actor) const = 0;
00414 
00419     virtual const PhysXObjectDesc* getPhysXObjectInfo(const PxShape* shape) const = 0;
00420 
00425     virtual const PhysXObjectDesc* getPhysXObjectInfo(const PxJoint* joint) const = 0;
00426 
00431     virtual const PhysXObjectDesc* getPhysXObjectInfo(const PxCloth* cloth) const = 0;
00432 
00436     virtual PxCooking* getCookingInterface() = 0;
00437 #endif
00438 
00443     PX_DEPRECATED virtual PxErrorCallback* getOutputStream() = 0;
00444 
00448     virtual PxErrorCallback* getErrorCallback() const = 0;
00449 
00453     virtual PxAllocatorCallback* getAllocator() const = 0;
00454 
00458     virtual ResourceProvider* getNamedResourceProvider() = 0;
00459 
00465     virtual PxFileBuf* createStream(const char* filename, PxFileBuf::OpenMode mode) = 0;
00466 
00470     virtual PxFileBuf* createMemoryReadStream(const void* mem, uint32_t len) = 0;
00471 
00475     virtual PxFileBuf* createMemoryWriteStream(uint32_t alignment = 0) = 0;
00476 
00480     virtual const void* getMemoryWriteBuffer(PxFileBuf& stream, uint32_t& len) = 0;
00481 
00485     virtual void releaseMemoryReadStream(PxFileBuf& stream) = 0;
00486 
00490     virtual void releaseMemoryWriteStream(PxFileBuf& stream) = 0;
00491 
00492 #if PX_PHYSICS_VERSION_MAJOR == 3
00493 
00496     virtual PxPhysics* getPhysXSDK() = 0;
00497 #endif
00498 
00502     virtual uint32_t getNbModules() = 0;
00503 
00507     virtual Module** getModules() = 0;
00508 
00512     virtual void releaseModule(Module* module) = 0;
00513 
00517     virtual RenderDebugInterface* createApexRenderDebug(RENDER_DEBUG::RenderDebugInterface* iface, bool useRemoteDebugVisualization = false) = 0;
00518 
00522     virtual void releaseApexRenderDebug(RenderDebugInterface& debug) = 0;
00523 
00527     virtual SphereShape* createApexSphereShape() = 0;
00528 
00532     virtual CapsuleShape* createApexCapsuleShape() = 0;
00533 
00537     virtual BoxShape* createApexBoxShape() = 0;
00538 
00542     virtual HalfSpaceShape* createApexHalfSpaceShape() = 0;
00543 
00547     virtual void releaseApexShape(Shape& shape) = 0;
00548 
00552     virtual uint32_t forceLoadAssets() = 0;
00553 
00560     virtual bool getAuthorableObjectNames(const char** authTypeNames, uint32_t& outCount, uint32_t inCount) = 0;
00561 
00565     virtual ::NvParameterized::Traits* getParameterizedTraits() = 0;
00566 
00570     virtual Asset* createAsset(AssetAuthoring&, const char* name) = 0;
00571 
00576     virtual Asset* createAsset(::NvParameterized::Interface*, const char* name) = 0;
00577 
00581     virtual void releaseAsset(Asset&) = 0;
00582 
00586     virtual AssetAuthoring* createAssetAuthoring(const char* authorTypeName) = 0;
00587 
00591     virtual AssetAuthoring* createAssetAuthoring(const char* authorTypeName, const char* name) = 0;
00592 
00596     virtual AssetAuthoring* createAssetAuthoring(::NvParameterized::Interface*, const char* name) = 0;
00597 
00601     virtual void releaseAssetAuthoring(AssetAuthoring&) = 0;
00602 
00606     virtual ApexSDKCachedData& getCachedData() const = 0;
00607 
00611     virtual ::NvParameterized::Serializer* createSerializer(::NvParameterized::Serializer::SerializeType type) = 0;
00612 
00616     virtual ::NvParameterized::Serializer* createSerializer(::NvParameterized::Serializer::SerializeType type, ::NvParameterized::Traits* traits) = 0;
00617 
00622     virtual ::NvParameterized::Serializer::SerializeType getSerializeType(const void* data, uint32_t dlen) = 0;
00623 
00627     virtual ::NvParameterized::Serializer::SerializeType getSerializeType(PxFileBuf& stream) = 0;
00628 
00632     virtual NvParameterized::Serializer::ErrorType getSerializePlatform(PxFileBuf& stream, NvParameterized::SerializePlatform& platform) = 0;
00633 
00638     virtual NvParameterized::Serializer::ErrorType getSerializePlatform(const void* data, uint32_t dlen, NvParameterized::SerializePlatform& platform) = 0;
00639 
00643     virtual void getCurrentPlatform(NvParameterized::SerializePlatform& platform) const = 0;
00644 
00654     virtual bool getPlatformFromString(const char* name, NvParameterized::SerializePlatform& platform) const = 0;
00655 
00659     virtual const char* getPlatformName(const NvParameterized::SerializePlatform& platform) const = 0;
00660 
00665     virtual ::NvParameterized::Interface* getDebugColorParams() const = 0;
00666 
00670     virtual const char* getWireframeMaterial() = 0;
00671 
00675     virtual const char* getSolidShadedMaterial() = 0;
00676 
00680     virtual void setEnableApexStats(bool enableApexStats) = 0;
00681 
00685     virtual void setEnableConcurrencyCheck(bool enableConcurrencyChecks) = 0;
00686 
00690     virtual bool isConcurrencyCheckEnabled() = 0;
00691 
00692 protected:
00693     virtual ~ApexSDK() {}
00694 
00695 };
00696 
00707 PX_POP_PACK
00708 
00709 #ifdef CALL_CONV
00710 #undef CALL_CONV
00711 #endif
00712 
00713 #if PX_WINDOWS_FAMILY
00714 
00715 #define APEX_API extern "C" __declspec(dllexport)
00716 #define CALL_CONV __cdecl
00717 #else
00718 #define APEX_API extern "C"
00719 #define CALL_CONV /* void */
00720 #endif
00721 
00725 APEX_API ApexSDK*   CALL_CONV CreateApexSDK(    const ApexSDKDesc& desc, 
00726                                                         ApexCreateError* errorCode = NULL, 
00727                                                         uint32_t APEXsdkVersion = APEX_SDK_VERSION, 
00728                                                         PxAllocatorCallback* alloc = 0);
00729 
00733 APEX_API ApexSDK*   CALL_CONV GetApexSDK();
00734 
00735 }
00736 } // end namespace nvidia::apex
00737 
00738 #endif // APEX_SDK_H

Generated on Fri Dec 15 2017 13:58:35
Copyright © 2012-2017 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved.