diff --git a/panda/src/char/characterJointEffect.cxx b/panda/src/char/characterJointEffect.cxx index 5b0d460daf..e038f4172e 100644 --- a/panda/src/char/characterJointEffect.cxx +++ b/panda/src/char/characterJointEffect.cxx @@ -236,7 +236,11 @@ void CharacterJointEffect:: write_datagram(BamWriter *manager, Datagram &dg) { RenderEffect::write_datagram(manager, dg); - manager->write_pointer(dg, _character); + if (_character.is_valid_pointer()) { + manager->write_pointer(dg, _character); + } else { + manager->write_pointer(dg, NULL); + } } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/pgraph/renderEffects.cxx b/panda/src/pgraph/renderEffects.cxx index 60f50f396e..b5ad6204e7 100644 --- a/panda/src/pgraph/renderEffects.cxx +++ b/panda/src/pgraph/renderEffects.cxx @@ -801,13 +801,21 @@ complete_pointers(TypedWritable **p_list, BamReader *manager) { int pi = TypedWritable::complete_pointers(p_list, manager); // Get the effect pointers. - Effects::iterator ai; - for (ai = _effects.begin(); ai != _effects.end(); ++ai) { - Effect &effect = (*ai); + size_t i = 0; + while (i < _effects.size()) { + Effect &effect = _effects[i]; effect._effect = DCAST(RenderEffect, p_list[pi++]); - nassertr(effect._effect != (RenderEffect *)NULL, pi); - effect._type = effect._effect->get_type(); + if (effect._effect == (RenderEffect *)NULL) { + // Remove this bogus RenderEffect pointer (it must have been + // from an unwritable class). + _effects.erase(_effects.begin() + i); + + } else { + // Keep this good pointer, and increment. + effect._type = effect._effect->get_type(); + ++i; + } } // Now make sure the array is properly sorted. (It won't