diff options
| author | malbach <malbach@free.fr> | 2018-06-25 16:07:14 +0200 |
|---|---|---|
| committer | malbach <malbach@free.fr> | 2018-06-25 18:17:28 +0200 |
| commit | cef8d355d2d4683d538a3ec1ac2ba7f181573c70 (patch) | |
| tree | 8d59c800b60c188b83754a3b0026e6d14fff3a44 /servers | |
| parent | 682c2f249369e18724ffbe1c2c7ba617c05fb379 (diff) | |
Fix #19507 Not emitted particles affects performance
Diffstat (limited to 'servers')
| -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 | ||||
| -rw-r--r-- | servers/visual_server.cpp | 1 | ||||
| -rw-r--r-- | servers/visual_server.h | 1 |
6 files changed, 11 insertions, 4 deletions
diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h index 8d8e9e693e..e703262832 100644 --- a/servers/visual/rasterizer.h +++ b/servers/visual/rasterizer.h @@ -477,6 +477,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 8f19de9f8b..475d97adaa 100644 --- a/servers/visual/visual_server_raster.h +++ b/servers/visual/visual_server_raster.h @@ -388,6 +388,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 b7abb07f43..09d9907be0 100644 --- a/servers/visual/visual_server_scene.cpp +++ b/servers/visual/visual_server_scene.cpp @@ -1869,10 +1869,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 19bb58f3ad..65987d7409 100644 --- a/servers/visual/visual_server_wrap_mt.h +++ b/servers/visual/visual_server_wrap_mt.h @@ -322,6 +322,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) diff --git a/servers/visual_server.cpp b/servers/visual_server.cpp index 21745e87a8..f27b9bc999 100644 --- a/servers/visual_server.cpp +++ b/servers/visual_server.cpp @@ -1696,6 +1696,7 @@ void VisualServer::_bind_methods() { ClassDB::bind_method(D_METHOD("particles_create"), &VisualServer::particles_create); ClassDB::bind_method(D_METHOD("particles_set_emitting", "particles", "emitting"), &VisualServer::particles_set_emitting); ClassDB::bind_method(D_METHOD("particles_get_emitting", "particles"), &VisualServer::particles_get_emitting); + ClassDB::bind_method(D_METHOD("particles_get_inactive", "particles"), &VisualServer::particles_get_inactive); ClassDB::bind_method(D_METHOD("particles_set_amount", "particles", "amount"), &VisualServer::particles_set_amount); ClassDB::bind_method(D_METHOD("particles_set_lifetime", "particles", "lifetime"), &VisualServer::particles_set_lifetime); ClassDB::bind_method(D_METHOD("particles_set_one_shot", "particles", "one_shot"), &VisualServer::particles_set_one_shot); diff --git a/servers/visual_server.h b/servers/visual_server.h index 65d0f07a43..8509694372 100644 --- a/servers/visual_server.h +++ b/servers/visual_server.h @@ -508,6 +508,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; virtual void particles_set_one_shot(RID p_particles, bool p_one_shot) = 0; |