PxCooking.h

Go to the documentation of this file.
00001 // This code contains NVIDIA Confidential Information and is disclosed to you
00002 // under a form of NVIDIA software license agreement provided separately to you.
00003 //
00004 // Notice
00005 // NVIDIA Corporation and its licensors retain all intellectual property and
00006 // proprietary rights in and to this software and related documentation and
00007 // any modifications thereto. Any use, reproduction, disclosure, or
00008 // distribution of this software and related documentation without an express
00009 // license agreement from NVIDIA Corporation is strictly prohibited.
00010 //
00011 // ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES
00012 // NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
00013 // THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT,
00014 // MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
00015 //
00016 // Information and code furnished is believed to be accurate and reliable.
00017 // However, NVIDIA Corporation assumes no responsibility for the consequences of use of such
00018 // information or for any infringement of patents or other rights of third parties that may
00019 // result from its use. No license is granted by implication or otherwise under any patent
00020 // or patent rights of NVIDIA Corporation. Details are subject to change without notice.
00021 // This code supersedes and replaces all information previously supplied.
00022 // NVIDIA Corporation products are not authorized for use as critical
00023 // components in life support devices or systems without express written approval of
00024 // NVIDIA Corporation.
00025 //
00026 // Copyright (c) 2008-2016 NVIDIA Corporation. All rights reserved.
00027 // Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
00028 // Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
00029 
00030 
00031 #ifndef PX_COOKING_H
00032 #define PX_COOKING_H
00033 
00036 #include "common/PxPhysXCommonConfig.h"
00037 #include "common/PxTolerancesScale.h"
00038 #include "cooking/Pxc.h"
00039 
00040 #include "cooking/PxConvexMeshDesc.h"
00041 #include "cooking/PxTriangleMeshDesc.h"
00042 #include "cooking/PxMidphaseDesc.h"
00043 #include "geometry/PxTriangleMesh.h"
00044 
00045 #if !PX_DOXYGEN
00046 namespace physx
00047 {
00048 #endif
00049 
00050 class PxBinaryConverter;
00051 class PxPhysicsInsertionCallback;
00052 class PxFoundation;
00053 
00054 struct PX_DEPRECATED PxPlatform
00055 {
00056     enum Enum
00057     {
00058         ePC,
00059         eARM
00060     };
00061 };
00062 
00063 PX_DEPRECATED PX_FORCE_INLINE PxU32 PxGetGaussMapVertexLimitForPlatform(PxPlatform::Enum targetPlatform)
00064 {
00065     PX_ASSERT_WITH_MESSAGE( (targetPlatform >= PxPlatform::ePC) && 
00066                             (targetPlatform <= PxPlatform::eARM),
00067                             "Unexpected platform in PxGetGaussMapVertexLimitForPlatform");
00068 
00069     PxU32 limit = 0;
00070     switch(targetPlatform)
00071     {
00072         case PxPlatform::ePC:
00073             limit = 32;     break;
00074         case PxPlatform::eARM:
00075             limit = 32;     break;
00076     }
00077     return limit;
00078 }
00079 
00083 struct PxConvexMeshCookingResult
00084 {
00085     enum Enum
00086     {
00090         eSUCCESS,
00091 
00097         eZERO_AREA_TEST_FAILED,
00098 
00106         ePOLYGONS_LIMIT_REACHED,
00107 
00111         eFAILURE
00112     };
00113 };
00114 
00116 struct PxConvexMeshCookingType
00117 {
00118     enum Enum
00119     {
00132         eINFLATION_INCREMENTAL_HULL PX_DEPRECATED = 0,
00133 
00139         eQUICKHULL
00140     };
00141 };
00142 
00146 struct PxTriangleMeshCookingResult
00147 {
00148     enum Enum
00149     {
00153         eSUCCESS            = 0,
00154 
00158         eLARGE_TRIANGLE,
00159 
00163         eFAILURE
00164     };
00165 };
00166 
00173 struct PxMeshPreprocessingFlag
00174 {
00175     enum Enum
00176     {
00180         eWELD_VERTICES                  =   1 << 0, 
00181 
00190         eDISABLE_CLEAN_MESH                             =   1 << 1, 
00191 
00195         eDISABLE_ACTIVE_EDGES_PRECOMPUTE                =   1 << 2,
00196 
00202         eFORCE_32BIT_INDICES                            =   1 << 3
00203     };
00204 };
00205 
00206 typedef PxFlags<PxMeshPreprocessingFlag::Enum,PxU32> PxMeshPreprocessingFlags;
00207 
00214 struct PxCookingParams
00215 {
00225     PxPlatform::Enum    targetPlatform;
00248     PX_DEPRECATED float     skinWidth;
00249 
00262     float       areaTestEpsilon;
00263 
00271     PxConvexMeshCookingType::Enum convexMeshCookingType;
00272 
00280     bool        suppressTriangleMeshRemapTable;
00281 
00288     bool        buildTriangleAdjacencies;
00289 
00295     bool        buildGPUData;
00296 
00304     PxTolerancesScale scale;
00305 
00311     PxMeshPreprocessingFlags    meshPreprocessParams;
00312 
00322     PX_DEPRECATED PxMeshCookingHint::Enum           meshCookingHint;
00323 
00337     PX_DEPRECATED PxF32 meshSizePerformanceTradeOff;
00338 
00354     PxReal      meshWeldTolerance;
00355 
00366     PxMidphaseDesc midphaseDesc;
00367 
00375     PxU32   gaussMapLimit;
00376 
00377     PxCookingParams(const PxTolerancesScale& sc):
00378         skinWidth                       (0.025f*sc.length),
00379         areaTestEpsilon                 (0.06f*sc.length*sc.length),
00380         convexMeshCookingType           (PxConvexMeshCookingType::eQUICKHULL),
00381         suppressTriangleMeshRemapTable  (false),
00382         buildTriangleAdjacencies        (false),
00383         buildGPUData                    (false),
00384         scale                           (sc),
00385         meshPreprocessParams            (0),
00386         meshCookingHint                 (PxMeshCookingHint::eSIM_PERFORMANCE),
00387         meshSizePerformanceTradeOff     (0.55f),
00388         meshWeldTolerance               (0.f)
00389     {
00390 #if PX_INTEL_FAMILY
00391         targetPlatform = PxPlatform::ePC;
00392 #elif PX_ARM_FAMILY
00393         targetPlatform = PxPlatform::eARM;
00394 #else
00395 #error Unknown platform
00396 #endif
00397         gaussMapLimit = PxGetGaussMapVertexLimitForPlatform(targetPlatform);
00398     }
00399 };
00400 
00401 class PxCooking
00402 {
00403 public:
00412     virtual void  release() = 0;
00413 
00421     virtual void  setParams(const PxCookingParams& params) = 0;
00422 
00430     virtual const PxCookingParams& getParams() = 0;
00431 
00437     virtual bool  platformMismatch() = 0;
00438 
00459     virtual bool  cookTriangleMesh(const PxTriangleMeshDesc& desc, PxOutputStream& stream, PxTriangleMeshCookingResult::Enum* condition = NULL) = 0;
00460 
00472     virtual PxTriangleMesh*    createTriangleMesh(const PxTriangleMeshDesc& desc, PxPhysicsInsertionCallback& insertionCallback) = 0;
00473 
00487     virtual bool  validateTriangleMesh(const PxTriangleMeshDesc& desc) = 0;
00488 
00512     virtual bool  cookConvexMesh(const PxConvexMeshDesc& desc, PxOutputStream& stream, PxConvexMeshCookingResult::Enum* condition = NULL) = 0;
00513 
00528     virtual PxConvexMesh*    createConvexMesh(const PxConvexMeshDesc& desc, PxPhysicsInsertionCallback& insertionCallback) = 0;
00529 
00543     virtual bool  validateConvexMesh(const PxConvexMeshDesc& desc) = 0;
00544 
00545 
00567     virtual bool  computeHullPolygons(const PxSimpleTriangleMesh& mesh, PxAllocatorCallback& inCallback, PxU32& nbVerts, PxVec3*& vertices,
00568                                             PxU32& nbIndices, PxU32*& indices, PxU32& nbPolygons, PxHullPolygon*& hullPolygons) = 0;
00569 
00584     virtual bool  cookHeightField(const PxHeightFieldDesc& desc, PxOutputStream& stream) = 0;
00585 
00595     virtual PxHeightField*    createHeightField(const PxHeightFieldDesc& desc, PxPhysicsInsertionCallback& insertionCallback) = 0;
00596 
00597 
00598 protected:
00599     virtual ~PxCooking(){}
00600 };
00601 
00602 #if !PX_DOXYGEN
00603 } // namespace physx
00604 #endif
00605 
00623 PX_C_EXPORT PX_PHYSX_COOKING_API physx::PxCooking* PX_CALL_CONV PxCreateCooking(physx::PxU32 version,
00624                                                                                 physx::PxFoundation& foundation,
00625                                                                                 const physx::PxCookingParams& params);
00626 
00628 #endif


Copyright © 2008-2016 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved. www.nvidia.com