You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openmw-tes3coop/components/nifosg
scrawl 115e563a7a Fix race conditions caused by Array <-> GLBufferObject interactions (Bug #3580)
The first part of the fix is to assign VBO/EBO's upon loading the array in the Nif reader. This avoids triggering the 'addVertexBufferObjectIfRequired' code path in osg::Geometry which has the race condition when two threads add the same Array at the same time. Essentially, we want the Arrays to be 'const' when they come out of the Nif reader.

The second part of the fix is to make sure not to create empty arrays in the Nif reader (importantly, not assigning a VBO to the empty array). This empty array would be deleted when the NIFFile is cleaned up, and the detachment of the VBO assigned to it (which is still in use by other arrays) would cause threading issues.

This rare crash bug was first introduced with commit a7c5beb7c5. When using OSG dev version 3.5 the crashes were a little more prevalent, because 'addVertexBufferObjectIfRequired' in osg::Geometry is now used even when VBO's are disabled (as part of the VAO support changes).
8 years ago
..
controller.cpp Use ref_ptr 9 years ago
controller.hpp Remove debug output 9 years ago
nifloader.cpp Fix race conditions caused by Array <-> GLBufferObject interactions (Bug #3580) 8 years ago
nifloader.hpp More renaming of TextureManager -> ImageManager 9 years ago
particle.cpp Implement NiSphericalCollider (Closes #3644) 8 years ago
particle.hpp Implement NiSphericalCollider (Closes #3644) 8 years ago
userdata.hpp Update comment, osgAnimation::RigGeometry is no longer used 8 years ago