Failed to serialize big convex mesh sometimes

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.

Hi,
I was able to reproduce the issue, will take a closer look.
Regards,
Ales

I have a fix for this issue and it will be fixed with next patch update.

To work around this issue before the fix is out, please do not use in case of big convex meshes the insertion callback and create the mesh through streams.

Thanks for the report!
Regards,
Ales

Hi Ales,

OK, I will try to use streams to create them before the next release.

Thanks for your prompt reply !