aboutsummaryrefslogtreecommitdiff
path: root/PhysX_3.4/Source/GeomUtils/src/GuMetaData.cpp
diff options
context:
space:
mode:
authorgit perforce import user <a@b>2016-10-25 12:29:14 -0600
committerSheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees>2016-10-25 18:56:37 -0500
commit3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch)
treefa6485c169e50d7415a651bf838f5bcd0fd3bfbd /PhysX_3.4/Source/GeomUtils/src/GuMetaData.cpp
downloadphysx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz
physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip
Initial commit:
PhysX 3.4.0 Update @ 21294896 APEX 1.4.0 Update @ 21275617 [CL 21300167]
Diffstat (limited to 'PhysX_3.4/Source/GeomUtils/src/GuMetaData.cpp')
-rw-r--r--PhysX_3.4/Source/GeomUtils/src/GuMetaData.cpp598
1 files changed, 598 insertions, 0 deletions
diff --git a/PhysX_3.4/Source/GeomUtils/src/GuMetaData.cpp b/PhysX_3.4/Source/GeomUtils/src/GuMetaData.cpp
new file mode 100644
index 00000000..c08f3c29
--- /dev/null
+++ b/PhysX_3.4/Source/GeomUtils/src/GuMetaData.cpp
@@ -0,0 +1,598 @@
+// This code contains NVIDIA Confidential Information and is disclosed to you
+// under a form of NVIDIA software license agreement provided separately to you.
+//
+// Notice
+// NVIDIA Corporation and its licensors retain all intellectual property and
+// proprietary rights in and to this software and related documentation and
+// any modifications thereto. Any use, reproduction, disclosure, or
+// distribution of this software and related documentation without an express
+// license agreement from NVIDIA Corporation is strictly prohibited.
+//
+// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES
+// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
+// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT,
+// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
+//
+// Information and code furnished is believed to be accurate and reliable.
+// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such
+// information or for any infringement of patents or other rights of third parties that may
+// result from its use. No license is granted by implication or otherwise under any patent
+// or patent rights of NVIDIA Corporation. Details are subject to change without notice.
+// This code supersedes and replaces all information previously supplied.
+// NVIDIA Corporation products are not authorized for use as critical
+// components in life support devices or systems without express written approval of
+// NVIDIA Corporation.
+//
+// Copyright (c) 2008-2016 NVIDIA Corporation. All rights reserved.
+// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
+// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
+
+#include "foundation/PxIO.h"
+#include "GuHeightField.h"
+#include "GuConvexMeshData.h"
+#include "GuBigConvexData2.h"
+#include "GuConvexMesh.h"
+#include "GuTriangleMesh.h"
+#include "GuTriangleMeshBV4.h"
+#include "GuTriangleMeshRTree.h"
+#include "GuGeometryUnion.h"
+#include "PsIntrinsics.h"
+#include "CmPhysXCommon.h"
+#include "PxMetaData.h"
+
+using namespace physx;
+using namespace Ps;
+using namespace Cm;
+using namespace Gu;
+
+///////////////////////////////////////////////////////////////////////////////
+
+static void getBinaryMetaData_Valency(PxOutputStream& stream)
+{
+// 4 bytes
+ PX_DEF_BIN_METADATA_CLASS(stream, Valency)
+ PX_DEF_BIN_METADATA_ITEM(stream, Valency, PxU16, mCount, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, Valency, PxU16, mOffset, 0)
+}
+
+static void getBinaryMetaData_BigConvexRawData(PxOutputStream& stream)
+{
+// 24 bytes
+ PX_DEF_BIN_METADATA_CLASS(stream, BigConvexRawData)
+ PX_DEF_BIN_METADATA_ITEM(stream, BigConvexRawData, PxU16, mSubdiv, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, BigConvexRawData, PxU16, mNbSamples, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, BigConvexRawData, PxU8, mSamples, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, BigConvexRawData, PxU32, mNbVerts, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, BigConvexRawData, PxU32, mNbAdjVerts, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, BigConvexRawData, Valency, mValencies, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, BigConvexRawData, PxU8, mAdjacentVerts, PxMetaDataFlag::ePTR)
+}
+
+void BigConvexData::getBinaryMetaData(PxOutputStream& stream)
+{
+ getBinaryMetaData_Valency(stream);
+ getBinaryMetaData_BigConvexRawData(stream);
+
+// 28 bytes
+ PX_DEF_BIN_METADATA_CLASS(stream, BigConvexData)
+ PX_DEF_BIN_METADATA_ITEM(stream, BigConvexData, BigConvexRawData, mData, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, BigConvexData, void, mVBuffer, PxMetaDataFlag::ePTR)
+
+ //------ Extra-data ------
+
+ // mData.mSamples
+ // PT: can't use one array of PxU16 since we don't want to flip those bytes during conversion.
+ // PT: We only align the first array for DE1340, but the second one shouldn't be aligned since
+ // both are written as one unique block of memory.
+ PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream, BigConvexData, PxU8, mData.mNbSamples, PX_SERIAL_ALIGN, 0)
+ PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream, BigConvexData, PxU8, mData.mNbSamples, 0, 0)
+
+ // mData.mValencies
+ // PT: same here, we must only align the first array
+ PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream, BigConvexData, Valency, mData.mNbVerts, PX_SERIAL_ALIGN, 0)
+ PX_DEF_BIN_METADATA_EXTRA_ALIGN(stream, BigConvexData, PX_SERIAL_ALIGN)
+ PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream, BigConvexData, PxU8, mData.mNbAdjVerts, 0, 0)
+}
+
+static void getBinaryMetaData_InternalObjectsData(PxOutputStream& stream)
+{
+// 16 bytes
+ PX_DEF_BIN_METADATA_CLASS(stream, InternalObjectsData)
+ PX_DEF_BIN_METADATA_ITEM(stream, InternalObjectsData, PxReal, mRadius, 0)
+ PX_DEF_BIN_METADATA_ITEMS_AUTO(stream, InternalObjectsData, PxReal, mExtents, 0)
+}
+
+static void getBinaryMetaData_HullPolygonData(PxOutputStream& stream)
+{
+// 20 bytes
+ PX_DEF_BIN_METADATA_CLASS(stream, HullPolygonData)
+ PX_DEF_BIN_METADATA_ITEMS_AUTO(stream, HullPolygonData, PxReal, mPlane, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, HullPolygonData, PxU16, mVRef8, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, HullPolygonData, PxU8, mNbVerts, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, HullPolygonData, PxU8, mMinIndex, 0)
+}
+
+static void getBinaryMetaData_ConvexHullData(PxOutputStream& stream)
+{
+// 64 bytes
+ PX_DEF_BIN_METADATA_CLASS(stream, ConvexHullData)
+ PX_DEF_BIN_METADATA_ITEM(stream, ConvexHullData, PxBounds3, mAABB, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, ConvexHullData, PxVec3, mCenterOfMass, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, ConvexHullData, HullPolygonData, mPolygons, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, ConvexHullData, BigConvexRawData, mBigConvexRawData, PxMetaDataFlag::ePTR)
+ //ML: the most significant bit of mNbEdges is used to indicate whether we have grb data or not. However, we don't support grb data
+ //in serialization so we have to mask the most significant bit and force the contact gen run on CPU code path
+ PX_DEF_BIN_METADATA_ITEM(stream, ConvexHullData, PxU16, mNbEdges, PxMetaDataFlag::eCOUNT_MASK_MSB)
+ PX_DEF_BIN_METADATA_ITEM(stream, ConvexHullData, PxU8, mNbHullVertices, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, ConvexHullData, PxU8, mNbPolygons, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, ConvexHullData, InternalObjectsData, mInternal, 0)
+}
+
+void Gu::ConvexMesh::getBinaryMetaData(PxOutputStream& stream)
+{
+ getBinaryMetaData_InternalObjectsData(stream);
+ getBinaryMetaData_HullPolygonData(stream);
+ getBinaryMetaData_ConvexHullData(stream);
+ BigConvexData::getBinaryMetaData(stream);
+
+// 136 bytes
+ PX_DEF_BIN_METADATA_VCLASS(stream,ConvexMesh)
+ PX_DEF_BIN_METADATA_BASE_CLASS(stream,ConvexMesh, PxBase)
+ PX_DEF_BIN_METADATA_BASE_CLASS(stream,ConvexMesh, RefCountable)
+
+ //
+ PX_DEF_BIN_METADATA_ITEM(stream, ConvexMesh, ConvexHullData, mHullData, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, ConvexMesh, PxU32, mNb, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, ConvexMesh, BigConvexData, mBigConvexData, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, ConvexMesh, PxReal, mMass, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, ConvexMesh, PxMat33, mInertia, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, ConvexMesh, GuMeshFactory, mMeshFactory, PxMetaDataFlag::ePTR)
+
+ //------ Extra-data ------
+
+ // mHullData.mPolygons (Gu::HullPolygonData, PxVec3, PxU8*2, PxU8)
+ // PT: we only align the first array since the other ones are contained within it
+
+ PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream, Gu::ConvexMesh, HullPolygonData, mHullData.mNbPolygons, PX_SERIAL_ALIGN, 0)
+ PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream, Gu::ConvexMesh, PxVec3, mHullData.mNbHullVertices, 0, 0)
+ PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream, Gu::ConvexMesh, PxU8, mHullData.mNbEdges, 0, PxMetaDataFlag::eCOUNT_MASK_MSB)
+ PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream, Gu::ConvexMesh, PxU8, mHullData.mNbEdges, 0, PxMetaDataFlag::eCOUNT_MASK_MSB)
+ PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream, Gu::ConvexMesh, PxU8, mHullData.mNbHullVertices, 0, 0)
+ PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream, Gu::ConvexMesh, PxU8, mHullData.mNbHullVertices, 0, 0)
+ PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream, Gu::ConvexMesh, PxU8, mHullData.mNbHullVertices, 0, 0)
+
+ PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream, Gu::ConvexMesh, PxU8, mNb, 0, PxMetaDataFlag::eCOUNT_MASK_MSB)
+ PX_DEF_BIN_METADATA_EXTRA_ALIGN(stream, ConvexMesh, 4)
+ // mBigConvexData
+ PX_DEF_BIN_METADATA_EXTRA_ITEM(stream, Gu::ConvexMesh, BigConvexData, mBigConvexData, PX_SERIAL_ALIGN)
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+static void getBinaryMetaData_PxHeightFieldSample(PxOutputStream& stream)
+{
+ PX_DEF_BIN_METADATA_CLASS(stream, PxHeightFieldSample)
+ PX_DEF_BIN_METADATA_ITEM(stream, PxHeightFieldSample, PxI16, height, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, PxHeightFieldSample, PxBitAndByte, materialIndex0, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, PxHeightFieldSample, PxBitAndByte, materialIndex1, 0)
+ PX_DEF_BIN_METADATA_TYPEDEF(stream, PxBitAndByte, PxU8)
+}
+
+static void getBinaryMetaData_HeightFieldData(PxOutputStream& stream)
+{
+ PX_DEF_BIN_METADATA_TYPEDEF(stream, PxHeightFieldFlags, PxU16)
+ PX_DEF_BIN_METADATA_TYPEDEF(stream, PxHeightFieldFormat::Enum, PxU32)
+
+ PX_DEF_BIN_METADATA_CLASS(stream, HeightFieldData)
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightFieldData, PxBounds3, mAABB, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightFieldData, PxU32, rows, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightFieldData, PxU32, columns, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightFieldData, PxReal, rowLimit, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightFieldData, PxReal, colLimit, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightFieldData, PxReal, nbColumns, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightFieldData, PxHeightFieldSample, samples, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightFieldData, PxReal, thickness, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightFieldData, PxReal, convexEdgeThreshold, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightFieldData, PxHeightFieldFlags, flags, 0)
+#ifdef EXPLICIT_PADDING_METADATA
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightFieldData, PxU16, paddAfterFlags, PxMetaDataFlag::ePADDING)
+#endif
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightFieldData, PxHeightFieldFormat::Enum, format, 0)
+}
+
+void Gu::HeightField::getBinaryMetaData(PxOutputStream& stream)
+{
+ getBinaryMetaData_PxHeightFieldSample(stream);
+ getBinaryMetaData_HeightFieldData(stream);
+
+ PX_DEF_BIN_METADATA_TYPEDEF(stream, PxMaterialTableIndex, PxU16)
+
+ PX_DEF_BIN_METADATA_VCLASS(stream, HeightField)
+ PX_DEF_BIN_METADATA_BASE_CLASS(stream, HeightField, PxBase)
+ PX_DEF_BIN_METADATA_BASE_CLASS(stream, HeightField, RefCountable)
+
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightField, HeightFieldData, mData, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightField, PxU32, mSampleStride, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightField, PxU32, mNbSamples, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightField, PxReal, mMinHeight, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightField, PxReal, mMaxHeight, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightField, PxU32, mModifyCount, 0)
+
+ PX_DEF_BIN_METADATA_ITEM(stream, HeightField, GuMeshFactory, mMeshFactory, PxMetaDataFlag::ePTR)
+
+ //------ Extra-data ------
+
+ // mData.samples
+ PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream, HeightField, PxHeightFieldSample, mNbSamples, PX_SERIAL_ALIGN, 0) // PT: ### try to remove mNbSamples later
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+static void getBinaryMetaData_RTreePage(PxOutputStream& stream)
+{
+ PX_DEF_BIN_METADATA_CLASS(stream, RTreePage)
+ PX_DEF_BIN_METADATA_ITEMS(stream, RTreePage, PxReal, minx, 0, RTREE_N)
+ PX_DEF_BIN_METADATA_ITEMS(stream, RTreePage, PxReal, miny, 0, RTREE_N)
+ PX_DEF_BIN_METADATA_ITEMS(stream, RTreePage, PxReal, minz, 0, RTREE_N)
+ PX_DEF_BIN_METADATA_ITEMS(stream, RTreePage, PxReal, maxx, 0, RTREE_N)
+ PX_DEF_BIN_METADATA_ITEMS(stream, RTreePage, PxReal, maxy, 0, RTREE_N)
+ PX_DEF_BIN_METADATA_ITEMS(stream, RTreePage, PxReal, maxz, 0, RTREE_N)
+ PX_DEF_BIN_METADATA_ITEMS(stream, RTreePage, PxU32, ptrs, 0, RTREE_N)
+}
+
+void RTree::getBinaryMetaData(PxOutputStream& stream)
+{
+ getBinaryMetaData_RTreePage(stream);
+
+// 96 bytes
+ PX_DEF_BIN_METADATA_CLASS(stream, RTree)
+
+ PX_DEF_BIN_METADATA_ITEM(stream, RTree, PxVec4, mBoundsMin, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, RTree, PxVec4, mBoundsMax, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, RTree, PxVec4, mInvDiagonal, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, RTree, PxVec4, mDiagonalScaler, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, RTree, PxU32, mPageSize, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, RTree, PxU32, mNumRootPages, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, RTree, PxU32, mNumLevels, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, RTree, PxU32, mTotalNodes, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, RTree, PxU32, mTotalPages, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, RTree, PxU32, mFlags, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, RTree, RTreePage, mPages, PxMetaDataFlag::ePTR)
+
+ //------ Extra-data ------
+
+ // mPages
+ PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream,RTree, RTreePage, mTotalPages, 128, 0)
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+void SourceMesh::getBinaryMetaData(PxOutputStream& stream)
+{
+ PX_DEF_BIN_METADATA_CLASS(stream, SourceMesh)
+ PX_DEF_BIN_METADATA_ITEM(stream, SourceMesh, PxU32, mNbVerts, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, SourceMesh, PxVec3, mVerts, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, SourceMesh, PxU32, mNbTris, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, SourceMesh, void, mTriangles32, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, SourceMesh, void, mTriangles16, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, SourceMesh, PxU32, mRemap, PxMetaDataFlag::ePTR)
+}
+
+static void getBinaryMetaData_BVDataPacked(PxOutputStream& stream)
+{
+#ifdef GU_BV4_QUANTIZED_TREE
+ PX_DEF_BIN_METADATA_CLASS(stream, QuantizedAABB)
+ PX_DEF_BIN_METADATA_ITEM(stream, QuantizedAABB, PxU16, mData[0].mExtents, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, QuantizedAABB, PxI16, mData[0].mCenter, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, QuantizedAABB, PxU16, mData[1].mExtents, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, QuantizedAABB, PxI16, mData[1].mCenter, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, QuantizedAABB, PxU16, mData[2].mExtents, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, QuantizedAABB, PxI16, mData[2].mCenter, 0)
+#else
+ PX_DEF_BIN_METADATA_CLASS(stream, CenterExtents)
+ PX_DEF_BIN_METADATA_ITEM(stream, CenterExtents, PxVec3, mCenter, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, CenterExtents, PxVec3, mExtents, 0)
+#endif
+
+ PX_DEF_BIN_METADATA_CLASS(stream, BVDataPacked)
+#ifdef GU_BV4_QUANTIZED_TREE
+ PX_DEF_BIN_METADATA_ITEM(stream, BVDataPacked, QuantizedAABB, mAABB, 0)
+#else
+ PX_DEF_BIN_METADATA_ITEM(stream, BVDataPacked, CenterExtents, mAABB, 0)
+#endif
+ PX_DEF_BIN_METADATA_ITEM(stream, BVDataPacked, PxU32, mData, 0)
+}
+
+void BV4Tree::getBinaryMetaData(PxOutputStream& stream)
+{
+ getBinaryMetaData_BVDataPacked(stream);
+
+ PX_DEF_BIN_METADATA_CLASS(stream, LocalBounds)
+ PX_DEF_BIN_METADATA_ITEM(stream, LocalBounds, PxVec3, mCenter, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, LocalBounds, float, mExtentsMagnitude, 0)
+
+// 96 bytes
+ PX_DEF_BIN_METADATA_CLASS(stream, BV4Tree)
+
+ PX_DEF_BIN_METADATA_ITEM(stream, BV4Tree, void, mMeshInterface, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, BV4Tree, LocalBounds, mLocalBounds, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, BV4Tree, PxU32, mNbNodes, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, BV4Tree, BVDataPacked, mNodes, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, BV4Tree, PxU32, mInitData, 0)
+
+#ifdef GU_BV4_QUANTIZED_TREE
+ PX_DEF_BIN_METADATA_ITEM(stream, BV4Tree, PxVec3, mCenterOrMinCoeff, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, BV4Tree, PxVec3, mExtentsOrMaxCoeff, 0)
+#endif
+ PX_DEF_BIN_METADATA_ITEM(stream, BV4Tree, bool, mUserAllocated, 0)
+ PX_DEF_BIN_METADATA_ITEMS(stream, BV4Tree, bool, mPadding, PxMetaDataFlag::ePADDING, 3)
+
+ //------ Extra-data ------
+
+ PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream, BV4Tree, BVDataPacked, mNbNodes, 16, 0)
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+void Gu::TriangleMesh::getBinaryMetaData(PxOutputStream& stream)
+{
+// 320 => 304 => 272 => 256 bytes
+ PX_DEF_BIN_METADATA_VCLASS(stream, TriangleMesh)
+ PX_DEF_BIN_METADATA_BASE_CLASS(stream, TriangleMesh, PxBase)
+ PX_DEF_BIN_METADATA_BASE_CLASS(stream, TriangleMesh, RefCountable)
+
+// 224 => 208 => 192 bytes
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, PxU32, mNbVertices, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, PxU32, mNbTriangles, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, PxVec3, mVertices, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, void, mTriangles, PxMetaDataFlag::ePTR)
+
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, PxBounds3, mAABB, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, PxU8, mExtraTrigData, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, PxReal, mGeomEpsilon, 0)
+
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, PxU8, mFlags, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, PxU16, mMaterialIndices, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, PxU32, mFaceRemap, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, PxU32, mAdjacencies, PxMetaDataFlag::ePTR)
+
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, void, mGRB_triIndices, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, void, mGRB_triAdjacencies, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, PxU32, mGRB_vertValency, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, PxU32, mGRB_adjVertStart, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, PxU32, mGRB_adjVertices, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, PxU32, mGRB_meshAdjVerticiesTotal, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, PxU32, mGRB_faceRemap, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, void, mGRB_BV32Tree, PxMetaDataFlag::ePTR)
+
+
+ //------ Extra-data ------
+
+ // mVertices
+ PX_DEF_BIN_METADATA_EXTRA_ITEMS(stream, TriangleMesh, PxVec3, mVertices, mNbVertices, 0, PX_SERIAL_ALIGN)
+
+ // mTriangles
+ // PT: quite tricky here: we exported either an array of PxU16s or an array of PxU32s. We trick the converter by
+ // pretending we exported both, with the same control variable (m16BitIndices) but opposed control flags. Also there's
+ // no way to capture "mNumTriangles*3" using the macros, so we just pretend we exported 3 buffers instead of 1.
+ // But since in reality it's all the same buffer, only the first one is declared as aligned.
+
+ PX_DEF_BIN_METADATA_EXTRA_ITEMS_MASKED_CONTROL(stream, TriangleMesh, PxU16, mFlags, PxTriangleMeshFlag::e16_BIT_INDICES, mNbTriangles, 0, PX_SERIAL_ALIGN)
+ PX_DEF_BIN_METADATA_EXTRA_ITEMS_MASKED_CONTROL(stream, TriangleMesh, PxU16, mFlags, PxTriangleMeshFlag::e16_BIT_INDICES, mNbTriangles, 0, 0)
+ PX_DEF_BIN_METADATA_EXTRA_ITEMS_MASKED_CONTROL(stream, TriangleMesh, PxU16, mFlags, PxTriangleMeshFlag::e16_BIT_INDICES, mNbTriangles, 0, 0)
+ PX_DEF_BIN_METADATA_EXTRA_ITEMS_MASKED_CONTROL(stream, TriangleMesh, PxU32, mFlags, PxTriangleMeshFlag::e16_BIT_INDICES, mNbTriangles, PxMetaDataFlag::eCONTROL_FLIP, PX_SERIAL_ALIGN)
+ PX_DEF_BIN_METADATA_EXTRA_ITEMS_MASKED_CONTROL(stream, TriangleMesh, PxU32, mFlags, PxTriangleMeshFlag::e16_BIT_INDICES, mNbTriangles, PxMetaDataFlag::eCONTROL_FLIP, 0)
+ PX_DEF_BIN_METADATA_EXTRA_ITEMS_MASKED_CONTROL(stream, TriangleMesh, PxU32, mFlags, PxTriangleMeshFlag::e16_BIT_INDICES, mNbTriangles, PxMetaDataFlag::eCONTROL_FLIP, 0)
+
+ // mExtraTrigData
+ PX_DEF_BIN_METADATA_EXTRA_ITEMS(stream, TriangleMesh, PxU8, mExtraTrigData, mNbTriangles, 0, PX_SERIAL_ALIGN)
+
+ // mMaterialIndices
+ PX_DEF_BIN_METADATA_EXTRA_ITEMS(stream, TriangleMesh, PxU16, mMaterialIndices, mNbTriangles, 0, PX_SERIAL_ALIGN)
+
+ // mFaceRemap
+ PX_DEF_BIN_METADATA_EXTRA_ITEMS(stream, TriangleMesh, PxU32, mFaceRemap, mNbTriangles, 0, PX_SERIAL_ALIGN)
+
+ // mAdjacencies
+ PX_DEF_BIN_METADATA_EXTRA_ITEMS(stream, TriangleMesh, PxU32, mAdjacencies, mNbTriangles, 0, PX_SERIAL_ALIGN)
+ PX_DEF_BIN_METADATA_EXTRA_ITEMS(stream, TriangleMesh, PxU32, mAdjacencies, mNbTriangles, 0, 0)
+ PX_DEF_BIN_METADATA_EXTRA_ITEMS(stream, TriangleMesh, PxU32, mAdjacencies, mNbTriangles, 0, 0)
+
+ PX_DEF_BIN_METADATA_ITEM(stream, TriangleMesh, GuMeshFactory, mMeshFactory, PxMetaDataFlag::ePTR)
+
+
+#ifdef EXPLICIT_PADDING_METADATA
+ PX_DEF_BIN_METADATA_ITEMS_AUTO(stream, TriangleMesh, PxU32, mPaddingFromInternalMesh, PxMetaDataFlag::ePADDING)
+#endif
+}
+
+void Gu::RTreeTriangleMesh::getBinaryMetaData(PxOutputStream& stream)
+{
+ RTree::getBinaryMetaData(stream);
+
+ PX_DEF_BIN_METADATA_VCLASS(stream, RTreeTriangleMesh)
+ PX_DEF_BIN_METADATA_BASE_CLASS(stream, RTreeTriangleMesh, TriangleMesh)
+
+ PX_DEF_BIN_METADATA_ITEM(stream, RTreeTriangleMesh, RTree, mRTree, 0)
+}
+
+void Gu::BV4TriangleMesh::getBinaryMetaData(PxOutputStream& stream)
+{
+ SourceMesh::getBinaryMetaData(stream);
+ BV4Tree::getBinaryMetaData(stream);
+
+ PX_DEF_BIN_METADATA_VCLASS(stream, BV4TriangleMesh)
+ PX_DEF_BIN_METADATA_BASE_CLASS(stream, BV4TriangleMesh, TriangleMesh)
+
+ PX_DEF_BIN_METADATA_ITEM(stream, BV4TriangleMesh, SourceMesh, mMeshInterface, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, BV4TriangleMesh, BV4Tree, mBV4Tree, 0)
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+void MaterialIndicesStruct::getBinaryMetaData(PxOutputStream& stream)
+{
+ PX_DEF_BIN_METADATA_CLASS(stream, MaterialIndicesStruct)
+ PX_DEF_BIN_METADATA_ITEM(stream, MaterialIndicesStruct, PxU16, indices, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream, MaterialIndicesStruct, PxU16, numIndices, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream, MaterialIndicesStruct, PxU16, pad, PxMetaDataFlag::ePADDING)
+#if PX_P64_FAMILY
+ PX_DEF_BIN_METADATA_ITEM(stream, MaterialIndicesStruct, PxU32, pad64, PxMetaDataFlag::ePADDING)
+#endif
+
+ //------ Extra-data ------
+ // indices
+ PX_DEF_BIN_METADATA_EXTRA_ITEMS(stream, MaterialIndicesStruct, PxU16, indices, numIndices, 0, PX_SERIAL_ALIGN)
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+void Gu::GeometryUnion::getBinaryMetaData(PxOutputStream& stream)
+{
+ PX_DEF_BIN_METADATA_TYPEDEF(stream, PxGeometryType::Enum, PxU32)
+
+ // The various PxGeometry classes are all public, so I can't really put the meta-data function in there. And then
+ // I can't access their protected members. So we use the same trick as for the ShapeContainer
+ class ShadowConvexMeshGeometry : public PxConvexMeshGeometryLL
+ {
+ public:
+ static void getBinaryMetaData(PxOutputStream& stream_)
+ {
+ PX_DEF_BIN_METADATA_TYPEDEF(stream_, PxConvexMeshGeometryFlags, PxU8)
+
+ PX_DEF_BIN_METADATA_CLASS(stream_, ShadowConvexMeshGeometry)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowConvexMeshGeometry, PxGeometryType::Enum, mType, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowConvexMeshGeometry, PxMeshScale, scale, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowConvexMeshGeometry, PxConvexMesh, convexMesh, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowConvexMeshGeometry, PxConvexMeshGeometryFlags, meshFlags, 0)
+ PX_DEF_BIN_METADATA_ITEMS(stream_, ShadowConvexMeshGeometry, PxU8, paddingFromFlags, PxMetaDataFlag::ePADDING, 3)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowConvexMeshGeometry, ConvexHullData, hullData, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowConvexMeshGeometry, bool, gpuCompatible, 0)
+ }
+ };
+ ShadowConvexMeshGeometry::getBinaryMetaData(stream);
+ PX_DEF_BIN_METADATA_TYPEDEF(stream, PxConvexMeshGeometryLL, ShadowConvexMeshGeometry)
+
+ /////////////////
+
+ class ShadowTriangleMeshGeometry : public PxTriangleMeshGeometryLL
+ {
+ public:
+ static void getBinaryMetaData(PxOutputStream& stream_)
+ {
+ PX_DEF_BIN_METADATA_TYPEDEF(stream_, PxMeshGeometryFlags, PxU8)
+
+ PX_DEF_BIN_METADATA_CLASS(stream_, ShadowTriangleMeshGeometry)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowTriangleMeshGeometry, PxGeometryType::Enum, mType, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowTriangleMeshGeometry, PxMeshScale, scale, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowTriangleMeshGeometry, PxMeshGeometryFlags, meshFlags, 0)
+ PX_DEF_BIN_METADATA_ITEMS(stream_, ShadowTriangleMeshGeometry, PxU8, paddingFromFlags, PxMetaDataFlag::ePADDING, 3)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowTriangleMeshGeometry, PxTriangleMesh, triangleMesh, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowTriangleMeshGeometry, TriangleMesh, meshData, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowTriangleMeshGeometry, PxU16, materialIndices, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowTriangleMeshGeometry, MaterialIndicesStruct, materials, 0)
+ }
+ };
+ ShadowTriangleMeshGeometry::getBinaryMetaData(stream);
+ PX_DEF_BIN_METADATA_TYPEDEF(stream,PxTriangleMeshGeometryLL, ShadowTriangleMeshGeometry)
+
+ /////////////////
+
+ class ShadowHeightFieldGeometry : public PxHeightFieldGeometryLL
+ {
+ public:
+ static void getBinaryMetaData(PxOutputStream& stream_)
+ {
+ PX_DEF_BIN_METADATA_CLASS(stream_, ShadowHeightFieldGeometry)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowHeightFieldGeometry, PxGeometryType::Enum, mType, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowHeightFieldGeometry, PxHeightField, heightField, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowHeightFieldGeometry, PxReal, heightScale, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowHeightFieldGeometry, PxReal, rowScale, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowHeightFieldGeometry, PxReal, columnScale, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowHeightFieldGeometry, PxMeshGeometryFlags, heightFieldFlags, 0)
+ PX_DEF_BIN_METADATA_ITEMS_AUTO(stream_, ShadowHeightFieldGeometry, PxU8, paddingFromFlags, PxMetaDataFlag::ePADDING)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowHeightFieldGeometry, HeightField, heightFieldData, PxMetaDataFlag::ePTR)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowHeightFieldGeometry, MaterialIndicesStruct, materials, 0)
+ }
+ };
+ ShadowHeightFieldGeometry::getBinaryMetaData(stream);
+ PX_DEF_BIN_METADATA_TYPEDEF(stream,PxHeightFieldGeometryLL, ShadowHeightFieldGeometry)
+
+ /////////////////
+
+ class ShadowPlaneGeometry : public PxPlaneGeometry
+ {
+ public:
+ static void getBinaryMetaData(PxOutputStream& stream_)
+ {
+ PX_DEF_BIN_METADATA_CLASS(stream_, ShadowPlaneGeometry)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowPlaneGeometry, PxGeometryType::Enum, mType, 0)
+ }
+ };
+ ShadowPlaneGeometry::getBinaryMetaData(stream);
+ PX_DEF_BIN_METADATA_TYPEDEF(stream,PxPlaneGeometry, ShadowPlaneGeometry)
+
+ /////////////////
+
+ class ShadowSphereGeometry : public PxSphereGeometry
+ {
+ public:
+ static void getBinaryMetaData(PxOutputStream& stream_)
+ {
+ PX_DEF_BIN_METADATA_CLASS(stream_, ShadowSphereGeometry)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowSphereGeometry, PxGeometryType::Enum, mType, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowSphereGeometry, PxReal, radius, 0)
+ }
+ };
+ ShadowSphereGeometry::getBinaryMetaData(stream);
+ PX_DEF_BIN_METADATA_TYPEDEF(stream, PxSphereGeometry, ShadowSphereGeometry)
+
+ /////////////////
+
+ class ShadowCapsuleGeometry : public PxCapsuleGeometry
+ {
+ public:
+ static void getBinaryMetaData(PxOutputStream& stream_)
+ {
+ PX_DEF_BIN_METADATA_CLASS(stream_, ShadowCapsuleGeometry)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowCapsuleGeometry, PxGeometryType::Enum, mType, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowCapsuleGeometry, PxReal, radius, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowCapsuleGeometry, PxReal, halfHeight, 0)
+ }
+ };
+ ShadowCapsuleGeometry::getBinaryMetaData(stream);
+ PX_DEF_BIN_METADATA_TYPEDEF(stream, PxCapsuleGeometry, ShadowCapsuleGeometry)
+
+ /////////////////
+
+ class ShadowBoxGeometry : public PxBoxGeometry
+ {
+ public:
+ static void getBinaryMetaData(PxOutputStream& stream_)
+ {
+ PX_DEF_BIN_METADATA_CLASS(stream_, ShadowBoxGeometry)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowBoxGeometry, PxGeometryType::Enum, mType, 0)
+ PX_DEF_BIN_METADATA_ITEM(stream_, ShadowBoxGeometry, PxVec3, halfExtents,0)
+ }
+ };
+ ShadowBoxGeometry::getBinaryMetaData(stream);
+ PX_DEF_BIN_METADATA_TYPEDEF(stream, PxBoxGeometry, ShadowBoxGeometry)
+
+ /*
+ - geom union offset & size
+ - control type offset & size
+ - type-to-class mapping
+ */
+
+// 44 bytes
+ PX_DEF_BIN_METADATA_CLASS(stream, Gu::GeometryUnion)
+
+ PX_DEF_BIN_METADATA_UNION(stream, Gu::GeometryUnion, mGeometry)
+ PX_DEF_BIN_METADATA_UNION_TYPE(stream, Gu::GeometryUnion, PxSphereGeometry, PxGeometryType::eSPHERE)
+ PX_DEF_BIN_METADATA_UNION_TYPE(stream, Gu::GeometryUnion, PxPlaneGeometry, PxGeometryType::ePLANE)
+ PX_DEF_BIN_METADATA_UNION_TYPE(stream, Gu::GeometryUnion, PxCapsuleGeometry, PxGeometryType::eCAPSULE)
+ PX_DEF_BIN_METADATA_UNION_TYPE(stream, Gu::GeometryUnion, PxBoxGeometry, PxGeometryType::eBOX)
+ PX_DEF_BIN_METADATA_UNION_TYPE(stream, Gu::GeometryUnion, PxConvexMeshGeometryLL, PxGeometryType::eCONVEXMESH)
+ PX_DEF_BIN_METADATA_UNION_TYPE(stream, Gu::GeometryUnion, PxTriangleMeshGeometryLL,PxGeometryType::eTRIANGLEMESH)
+ PX_DEF_BIN_METADATA_UNION_TYPE(stream, Gu::GeometryUnion, PxHeightFieldGeometryLL, PxGeometryType::eHEIGHTFIELD)
+}