Hi,
I tried to serialize a convex mesh with 129 vertices but sometimes it fails as a C0000005 error.
// Initialize PhysX
initPhysics();
// Create serialization registry
PxSerializationRegistry* sr = PxSerialization::createSerializationRegistry(*gPhysics);
// Define the file stream for output
PxDefaultFileOutputStream outputStream("D:\test.bin");
// Define the convex mesh collection
PxCollection* meshCollection = PxCreateCollection();
// create a "big" convex mesh with 129 vertices
const PxVec3 vertices[] = {
PxVec3(0.307381, -0.070551, -0.0489382),
PxVec3(0.0560451, -0.283213, -0.0157099),
PxVec3(-0.202697, -0.170579, -0.0265989),
PxVec3(-0.282926, -0.0891388, -0.0375564),
PxVec3(0.289601, -0.187879, 0.292191),
PxVec3(0.248554, -0.157041, 0.359717),
PxVec3(0.212359, -0.266019, 0.331229),
PxVec3(0.217564, -0.299387, 0.304513),
PxVec3(-0.226954, 0.174818, 0.0597459),
PxVec3(-0.24037, -0.0643077, 0.38229),
PxVec3(-0.210774, 0.00064008, 0.39798),
PxVec3(-0.196558, 0.0594284, 0.362809),
PxVec3(-0.154511, -0.241272, 0.218933),
PxVec3(-0.220393, -0.171531, -0.0178029),
PxVec3(0.0354457, -0.304871, 0.0131369),
PxVec3(0.0449936, -0.324688, 0.106591),
PxVec3(0.302801, -0.127516, 0.304356),
PxVec3(0.193485, -0.284127, 0.00334264),
PxVec3(0.337269, -0.0988009, -0.0267843),
PxVec3(0.23323, 0.144396, 0.00681736),
PxVec3(0.276123, 0.106009, 0.120409),
PxVec3(0.286873, -0.28465, 0.0665074),
PxVec3(0.302938, -0.230035, -0.00533908),
PxVec3(0.312964, -0.232628, 0.101763),
PxVec3(0.221079, -0.360251, 0.180421),
PxVec3(-0.100528, 0.199857, -0.0199669),
PxVec3(-0.100106, 0.208877, -0.0115875),
PxVec3(0.10147, 0.225605, 0.0149784),
PxVec3(0.137287, 0.216184, 0.00927862),
PxVec3(0.143767, 0.201701, -0.00394462),
PxVec3(-0.187742, 0.210294, 0.00315468),
PxVec3(0.0945845, 0.233878, 0.0521513),
PxVec3(0.192796, -0.355552, 0.129616),
PxVec3(-0.175669, 0.122829, 0.266299),
PxVec3(-0.103162, 0.0687756, 0.390688),
PxVec3(0.0813943, 0.21846, 0.168879),
PxVec3(-0.201348, 0.203825, 0.0636727),
PxVec3(0.315559, -0.16211, -0.0301701),
PxVec3(0.299342, -0.220891, -0.0174041),
PxVec3(0.268884, 0.124818, 0.169431),
PxVec3(-0.216243, -0.0899922, 0.399781),
PxVec3(-0.19254, -0.126538, 0.390733),
PxVec3(-0.172075, -0.0959129, 0.417982),
PxVec3(0.301282, 0.00196596, 0.24305),
PxVec3(0.321097, -0.0521589, 0.219801),
PxVec3(0.269613, 0.0981481, 0.224622),
PxVec3(0.331981, -0.0566242, 0.110701),
PxVec3(0.338384, -0.111554, 0.00650494),
PxVec3(-0.281168, -0.117615, -0.0179959),
PxVec3(-0.281544, 0.0784352, -0.0274879),
PxVec3(-0.298503, 0.0196139, -0.0198247),
PxVec3(-0.252661, 0.14416, -0.0069088),
PxVec3(0.161163, -0.340383, 0.241696),
PxVec3(0.183164, -0.364505, 0.168905),
PxVec3(-0.298336, -0.0424053, -0.029083),
PxVec3(-0.313345, -0.0891616, 0.0110846),
PxVec3(0.24179, -0.0567385, 0.344952),
PxVec3(0.215943, -0.12618, 0.389156),
PxVec3(0.235341, -0.139101, 0.377982),
PxVec3(0.272847, -0.0956462, 0.334739),
PxVec3(0.244241, 0.00930656, 0.30733),
PxVec3(0.0539979, -0.0372339, 0.438752),
PxVec3(0.110134, -0.143868, 0.438846),
PxVec3(0.131727, -0.124234, 0.434437),
PxVec3(0.205938, 0.0723214, 0.301917),
PxVec3(-0.205471, 0.172209, -0.0152324),
PxVec3(0.239601, 0.140642, 0.19874),
PxVec3(0.173022, 0.179083, 0.191376),
PxVec3(0.239692, 0.150741, 0.167762),
PxVec3(-0.304206, -0.106286, 0.012352),
PxVec3(-0.188501, -0.211132, 0.229644),
PxVec3(-0.270081, -0.139715, 0.147879),
PxVec3(-0.249705, -0.0956158, 0.345112),
PxVec3(-0.212849, -0.035494, 0.405194),
PxVec3(-0.102923, 0.0123266, 0.427472),
PxVec3(-0.120843, -0.255557, 0.231297),
PxVec3(0.0833704, -0.340967, 0.140144),
PxVec3(0.0897484, -0.30229, 0.299275),
PxVec3(-0.025273, -0.204864, 0.380543),
PxVec3(0.168405, -0.362313, 0.14526),
PxVec3(0.0927354, 0.238155, 0.103515),
PxVec3(0.131272, 0.220188, 0.141275),
PxVec3(0.116718, 0.235925, 0.1008),
PxVec3(0.202773, -0.145895, 0.395079),
PxVec3(0.0674776, -0.155664, 0.433461),
PxVec3(-0.0557022, -0.155171, 0.418282),
PxVec3(0.112895, -0.300421, 0.313512),
PxVec3(0.147731, -0.299199, 0.319159),
PxVec3(-0.297337, -0.0940308, -0.0213944),
PxVec3(0.0660806, -0.131577, 0.441058),
PxVec3(0.0296824, -0.0303505, 0.43971),
PxVec3(-0.0748386, 0.013622, 0.430459),
PxVec3(0.171262, 0.196667, 0.00430022),
PxVec3(0.318336, -0.186261, -0.0166421),
PxVec3(0.329334, -0.101958, -0.0352857),
PxVec3(-0.269103, -0.126789, 0.209657),
PxVec3(-0.282605, -0.110155, 0.180698),
PxVec3(0.19195, -0.275722, -0.00690118),
PxVec3(0.206863, 0.174003, 0.0247853),
PxVec3(-0.211394, 0.189575, 0.0827075),
PxVec3(-0.216588, 0.193154, 0.0561391),
PxVec3(-0.238905, 0.165402, 0.00316484),
PxVec3(-0.23239, -0.0845896, 0.387777),
PxVec3(-0.233657, -0.0673151, 0.392595),
PxVec3(0.311203, -0.13826, 0.253843),
PxVec3(0.324401, -0.0696138, 0.206174),
PxVec3(0.202065, 0.181648, 0.0992784),
PxVec3(-0.131321, 0.0381457, 0.405661),
PxVec3(0.190185, -0.365879, 0.161638),
PxVec3(-0.268389, 0.0882701, -0.0328143),
PxVec3(-0.279944, 0.0530301, -0.0401142),
PxVec3(-0.288422, 0.0551231, -0.0318668),
PxVec3(-0.0922477, -0.148361, 0.414917),
PxVec3(0.154821, -0.360962, 0.1637),
PxVec3(-0.286057, -0.0419659, -0.0399567),
PxVec3(0.282285, -0.0406908, -0.0477012),
PxVec3(0.16573, 0.188669, -0.00649986),
PxVec3(-0.255283, -0.0904164, 0.33226),
PxVec3(0.229573, 0.14683, 0.00106934),
PxVec3(0.231374, 0.122364, -0.0131318),
PxVec3(0.247358, -0.300126, 0.224302),
PxVec3(-0.0999312, 0.0279781, 0.421543),
PxVec3(-0.00776478, -0.144457, 0.430901),
PxVec3(0.0363652, -0.0189357, 0.432115),
PxVec3(-0.237297, -0.161983, 0.224688),
PxVec3(0.211841, -0.303063, 0.305036),
PxVec3(0.320632, -0.0724256, -0.0364287),
PxVec3(0.130884, 0.197919, 0.184457),
PxVec3(0.100909, 0.239817, 0.0986003)
};
PxConvexMeshDesc convexMeshDesc;
convexMeshDesc.points.count = 129;
convexMeshDesc.points.stride = sizeof(PxVec3);
convexMeshDesc.points.data = vertices;
convexMeshDesc.flags = PxConvexFlag::eCOMPUTE_CONVEX;
convexMeshDesc.vertexLimit = 129;
PxConvexMesh* convexMesh = gCooking->createConvexMesh(convexMeshDesc, gPhysics->getPhysicsInsertionCallback());
// Add the convex mesh to collection and serialize it
meshCollection->add(*convexMesh, PxSerialObjectId(1));
// Fails about once every ten times
PxSerialization::serializeCollectionToBinary(outputStream, *meshCollection, *sr);
meshCollection->release();
// terminate PhysX
cleanupPhysics();
printf("Serialization done.\n");
return 0;
It fails in the case of assign full polygon data to PxConvexMeshDesc too.
Hope that someone could figure out the point of the problem, Thanks.