From f523515aed811ed70ad475efca7e29acdf027e7d Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 26 Jun 2008 18:06:24 +0000 Subject: [PATCH] From Morten Haukness, "When cloning effects osg crashes because the copy constructur tries to run av pure virtual method (setUpEmitterAndProgram). The right thing to do when cloning an effect is to run the inherited version og buildEffect and setUpEmitterAndProgram. " --- src/osgParticle/ExplosionDebrisEffect.cpp | 1 + src/osgParticle/ExplosionEffect.cpp | 1 + src/osgParticle/FireEffect.cpp | 1 + src/osgParticle/ParticleEffect.cpp | 1 - src/osgParticle/SmokeEffect.cpp | 1 + src/osgParticle/SmokeTrailEffect.cpp | 1 + 6 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/osgParticle/ExplosionDebrisEffect.cpp b/src/osgParticle/ExplosionDebrisEffect.cpp index 47aa758a4..da52540ee 100644 --- a/src/osgParticle/ExplosionDebrisEffect.cpp +++ b/src/osgParticle/ExplosionDebrisEffect.cpp @@ -57,6 +57,7 @@ ExplosionDebrisEffect::ExplosionDebrisEffect(const osg::Vec3& position, float sc ExplosionDebrisEffect::ExplosionDebrisEffect(const ExplosionDebrisEffect& copy, const osg::CopyOp& copyop): ParticleEffect(copy,copyop) { + if (_automaticSetup) buildEffect(); } void ExplosionDebrisEffect::setDefaults() diff --git a/src/osgParticle/ExplosionEffect.cpp b/src/osgParticle/ExplosionEffect.cpp index 4f4f7674c..c15a39d07 100644 --- a/src/osgParticle/ExplosionEffect.cpp +++ b/src/osgParticle/ExplosionEffect.cpp @@ -57,6 +57,7 @@ ExplosionEffect::ExplosionEffect(const osg::Vec3& position, float scale, float i ExplosionEffect::ExplosionEffect(const ExplosionEffect& copy, const osg::CopyOp& copyop): ParticleEffect(copy,copyop) { + if (_automaticSetup) buildEffect(); } void ExplosionEffect::setDefaults() diff --git a/src/osgParticle/FireEffect.cpp b/src/osgParticle/FireEffect.cpp index ac2d44104..5a3c25425 100644 --- a/src/osgParticle/FireEffect.cpp +++ b/src/osgParticle/FireEffect.cpp @@ -58,6 +58,7 @@ FireEffect::FireEffect(const osg::Vec3& position, float scale, float intensity) FireEffect::FireEffect(const FireEffect& copy, const osg::CopyOp& copyop): ParticleEffect(copy,copyop) { + if (_automaticSetup) buildEffect(); } void FireEffect::setDefaults() diff --git a/src/osgParticle/ParticleEffect.cpp b/src/osgParticle/ParticleEffect.cpp index 40d6f66f0..53d82b374 100644 --- a/src/osgParticle/ParticleEffect.cpp +++ b/src/osgParticle/ParticleEffect.cpp @@ -30,7 +30,6 @@ ParticleEffect::ParticleEffect(const ParticleEffect& copy, const osg::CopyOp& co _emitterDuration(copy._emitterDuration), _wind(copy._wind) { - if (_automaticSetup) buildEffect(); } void ParticleEffect::setUseLocalParticleSystem(bool local) diff --git a/src/osgParticle/SmokeEffect.cpp b/src/osgParticle/SmokeEffect.cpp index 5fd78dc4d..de4250e03 100644 --- a/src/osgParticle/SmokeEffect.cpp +++ b/src/osgParticle/SmokeEffect.cpp @@ -54,6 +54,7 @@ SmokeEffect::SmokeEffect(const osg::Vec3& position, float scale, float intensity SmokeEffect::SmokeEffect(const SmokeEffect& copy, const osg::CopyOp& copyop): ParticleEffect(copy,copyop) { + if (_automaticSetup) buildEffect(); } void SmokeEffect::setDefaults() diff --git a/src/osgParticle/SmokeTrailEffect.cpp b/src/osgParticle/SmokeTrailEffect.cpp index bfee2eaad..b130ba2fc 100644 --- a/src/osgParticle/SmokeTrailEffect.cpp +++ b/src/osgParticle/SmokeTrailEffect.cpp @@ -55,6 +55,7 @@ SmokeTrailEffect::SmokeTrailEffect(const osg::Vec3& position, float scale, float SmokeTrailEffect::SmokeTrailEffect(const SmokeTrailEffect& copy, const osg::CopyOp& copyop): ParticleEffect(copy,copyop) { + if (_automaticSetup) buildEffect(); } void SmokeTrailEffect::setDefaults()