diff options
author | Max Hilbrunner <mhilbrunner@users.noreply.github.com> | 2018-07-17 16:47:41 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-17 16:47:41 +0200 |
commit | 4b626dc1149a523c1a1d05064994521d1460e527 (patch) | |
tree | 6b8cf61624123c3d2205df12e901ff8518730585 /servers/visual | |
parent | c5690240b440871f2121afa3cc8c470152836558 (diff) | |
parent | cef8d355d2d4683d538a3ec1ac2ba7f181573c70 (diff) |
Merge pull request #19764 from malbach/godot_malbach
Fix #19507 Not emitted particles affects performance
Diffstat (limited to 'servers/visual')
-rw-r--r-- | servers/visual/rasterizer.h | 1 | ||||
-rw-r--r-- | servers/visual/visual_server_raster.h | 1 | ||||
-rw-r--r-- | servers/visual/visual_server_scene.cpp | 10 | ||||
-rw-r--r-- | servers/visual/visual_server_wrap_mt.h | 1 |
4 files changed, 9 insertions, 4 deletions
diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h index 0b37d266e7..72ae53d62d 100644 --- a/servers/visual/rasterizer.h +++ b/servers/visual/rasterizer.h @@ -482,6 +482,7 @@ public: virtual void particles_set_emitting(RID p_particles, bool p_emitting) = 0; virtual bool particles_get_emitting(RID p_particles) = 0; + virtual bool particles_get_inactive(RID p_particles) = 0; virtual void particles_set_amount(RID p_particles, int p_amount) = 0; virtual void particles_set_lifetime(RID p_particles, float p_lifetime) = 0; diff --git a/servers/visual/visual_server_raster.h b/servers/visual/visual_server_raster.h index ec0d02ed2a..d3221d9398 100644 --- a/servers/visual/visual_server_raster.h +++ b/servers/visual/visual_server_raster.h @@ -396,6 +396,7 @@ public: BIND2(particles_set_emitting, RID, bool) BIND1R(bool, particles_get_emitting, RID) + BIND1R(bool, particles_get_inactive, RID) BIND2(particles_set_amount, RID, int) BIND2(particles_set_lifetime, RID, float) BIND2(particles_set_one_shot, RID, bool) diff --git a/servers/visual/visual_server_scene.cpp b/servers/visual/visual_server_scene.cpp index 697c890c9a..b8c90cffa1 100644 --- a/servers/visual/visual_server_scene.cpp +++ b/servers/visual/visual_server_scene.cpp @@ -1872,10 +1872,12 @@ void VisualServerScene::_prepare_scene(const Transform p_cam_transform, const Ca InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(ins->base_data); if (ins->base_type == VS::INSTANCE_PARTICLES) { - //particles visible? process them - VSG::storage->particles_request_process(ins->base); - //particles visible? request redraw - VisualServerRaster::redraw_request(); + if (VSG::storage->particles_get_emitting(ins->base) || !VSG::storage->particles_get_inactive(ins->base)) { + //particles visible? process them + VSG::storage->particles_request_process(ins->base); + //particles visible? request redraw + VisualServerRaster::redraw_request(); + } } if (geom->lighting_dirty) { diff --git a/servers/visual/visual_server_wrap_mt.h b/servers/visual/visual_server_wrap_mt.h index 48f0ec46f3..e98856aaca 100644 --- a/servers/visual/visual_server_wrap_mt.h +++ b/servers/visual/visual_server_wrap_mt.h @@ -328,6 +328,7 @@ public: FUNC2(particles_set_emitting, RID, bool) FUNC1R(bool, particles_get_emitting, RID) + FUNC1R(bool, particles_get_inactive, RID) FUNC2(particles_set_amount, RID, int) FUNC2(particles_set_lifetime, RID, float) FUNC2(particles_set_one_shot, RID, bool) |