FPhysXFormatDataReader::FPhysXFormatDataReader( FByteBulkData& InBulkData ) : TriMesh( NULL ) , TriMeshNegX( NULL ) { // Read cooked physics data uint8* DataPtr = (uint8*)InBulkData.Lock( LOCK_READ_ONLY ); FBufferReader Ar( DataPtr, InBulkData.GetBulkDataSize(), false ); uint8 bLittleEndian = true; int32 NumConvexElementsCooked = 0; int32 NumMirroredElementsCooked = 0; uint8 bTriMeshCooked = false; uint8 bMirroredTriMeshCooked = false; Ar << bLittleEndian; Ar.SetByteSwapping( PLATFORM_LITTLE_ENDIAN ? !bLittleEndian : !!bLittleEndian ); Ar << NumConvexElementsCooked; Ar << NumMirroredElementsCooked; Ar << bTriMeshCooked; Ar << bMirroredTriMeshCooked; ConvexMeshes.Empty( NumConvexElementsCooked ); ConvexMeshesNegX.Empty( NumMirroredElementsCooked ); for( int32 ElementIndex = 0; ElementIndex < NumConvexElementsCooked; ElementIndex++ ) { PxConvexMesh* ConvexMesh = ReadConvexMesh( Ar, DataPtr, InBulkData.GetBulkDataSize() ); ConvexMeshes.Add( ConvexMesh ); } for( int32 ElementIndex = 0; ElementIndex < NumMirroredElementsCooked; ElementIndex++ ) { PxConvexMesh* ConvexMeshNegX = ReadConvexMesh( Ar, DataPtr, InBulkData.GetBulkDataSize() ); ConvexMeshesNegX.Add( ConvexMeshNegX ); } if( bTriMeshCooked ) { TriMesh = ReadTriMesh( Ar, DataPtr, InBulkData.GetBulkDataSize() ); check(TriMesh); } if( bMirroredTriMeshCooked ) { TriMeshNegX = ReadTriMesh( Ar, DataPtr, InBulkData.GetBulkDataSize() ); check(TriMeshNegX); } InBulkData.Unlock(); }
FPhysXFormatDataReader::FPhysXFormatDataReader( FByteBulkData& InBulkData, FBodySetupUVInfo* UVInfo ) { // Read cooked physics data uint8* DataPtr = (uint8*)InBulkData.Lock( LOCK_READ_ONLY ); FBufferReader Ar( DataPtr, InBulkData.GetBulkDataSize(), false ); uint8 bLittleEndian = true; int32 NumConvexElementsCooked = 0; int32 NumMirroredElementsCooked = 0; int32 NumTriMeshesCooked = 0; Ar << bLittleEndian; Ar.SetByteSwapping( PLATFORM_LITTLE_ENDIAN ? !bLittleEndian : !!bLittleEndian ); Ar << NumConvexElementsCooked; Ar << NumMirroredElementsCooked; Ar << NumTriMeshesCooked; ConvexMeshes.Empty(NumConvexElementsCooked); for( int32 ElementIndex = 0; ElementIndex < NumConvexElementsCooked; ElementIndex++ ) { PxConvexMesh* ConvexMesh = ReadConvexMesh( Ar, DataPtr, InBulkData.GetBulkDataSize() ); ConvexMeshes.Add( ConvexMesh ); } ConvexMeshesNegX.Empty(NumMirroredElementsCooked); for( int32 ElementIndex = 0; ElementIndex < NumMirroredElementsCooked; ElementIndex++ ) { PxConvexMesh* ConvexMeshNegX = ReadConvexMesh( Ar, DataPtr, InBulkData.GetBulkDataSize() ); ConvexMeshesNegX.Add( ConvexMeshNegX ); } TriMeshes.Empty(NumTriMeshesCooked); for(int32 ElementIndex = 0; ElementIndex < NumTriMeshesCooked; ++ElementIndex) { PxTriangleMesh* TriMesh = ReadTriMesh( Ar, DataPtr, InBulkData.GetBulkDataSize() ); TriMeshes.Add(TriMesh); } // Init UVInfo pointer check(UVInfo); Ar << *UVInfo; InBulkData.Unlock(); }