diff options
m--------- | release/datafiles/locale | 0 | ||||
m--------- | release/scripts/addons | 0 | ||||
-rw-r--r-- | source/blender/draw/engines/external/external_engine.c | 20 |
3 files changed, 20 insertions, 0 deletions
diff --git a/release/datafiles/locale b/release/datafiles/locale -Subproject 80f390fd0e20d7e2aadf07c43a45717e810fa10 +Subproject 1d9b8b2ffa67a8832073acf316150b2dfaa2db0 diff --git a/release/scripts/addons b/release/scripts/addons -Subproject 44c17b01168ea180d7ea865e9ec1ef6e93097b3 +Subproject 590710871b7b2e1f7f50bb622f1409b794ad38c diff --git a/source/blender/draw/engines/external/external_engine.c b/source/blender/draw/engines/external/external_engine.c index ee4bd58ab80..7dddbd07623 100644 --- a/source/blender/draw/engines/external/external_engine.c +++ b/source/blender/draw/engines/external/external_engine.c @@ -25,10 +25,12 @@ #include "DRW_render.h" +#include "DNA_modifier_types.h" #include "DNA_screen_types.h" #include "DNA_view3d_types.h" #include "BKE_object.h" +#include "BKE_particle.h" #include "ED_screen.h" @@ -166,6 +168,24 @@ static void external_cache_populate(void *vedata, Object *ob) return; } + if (ob->type == OB_MESH && ob->modifiers.first != NULL) { + LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) { + if (md->type != eModifierType_ParticleSystem) { + continue; + } + ParticleSystem *psys = ((ParticleSystemModifierData *)md)->psys; + if (!DRW_object_is_visible_psys_in_active_context(ob, psys)) { + continue; + } + ParticleSettings *part = psys->part; + const int draw_as = (part->draw_as == PART_DRAW_REND) ? part->ren_as : part->draw_as; + + if (draw_as == PART_DRAW_PATH) { + struct GPUBatch *hairs = DRW_cache_particles_get_hair(ob, psys, NULL); + DRW_shgroup_call(stl->g_data->depth_shgrp, hairs, NULL); + } + } + } struct GPUBatch *geom = DRW_cache_object_surface_get(ob); if (geom) { /* Depth Prepass */ |