diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-04-27 08:56:04 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-04-27 08:56:04 +0300 |
commit | 4afbd0894191e68b15c74bb750209c4854f465f0 (patch) | |
tree | 6cba32fcae36a3c59fc73065ca3a401d7407a256 /source/blender/draw/engines/eevee/eevee_engine.c | |
parent | d8ce3ed140ab5e2f371cc307a0a7de3287b53724 (diff) |
Fix/workaround crash with non mesh geometry
eevee was crashing on curve grometry, draw without material for now.
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_engine.c')
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_engine.c | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c index 5bab508e9d8..6868a2be36c 100644 --- a/source/blender/draw/engines/eevee/eevee_engine.c +++ b/source/blender/draw/engines/eevee/eevee_engine.c @@ -499,18 +499,28 @@ static void EEVEE_cache_populate(void *vedata, Object *ob) /* Get per-material split surface */ struct Batch **mat_geom = DRW_cache_object_surface_material_get(ob); - for (int i = 0; i < MAX2(1, ob->totcol); ++i) { - Material *ma = give_current_material(ob, i + 1); - - if (ma == NULL) - ma = &defmaterial; - - DRWShadingGroup *shgrp = DRW_shgroup_create(e_data.default_lit, psl->material_pass); - DRW_shgroup_uniform_vec3(shgrp, "diffuse_col", &ma->r, 1); - DRW_shgroup_uniform_vec3(shgrp, "specular_col", &ma->specr, 1); - DRW_shgroup_uniform_short(shgrp, "hardness", &ma->har, 1); - DRW_shgroup_call_add(shgrp, mat_geom[i], ob->obmat); + if (mat_geom) { + for (int i = 0; i < MAX2(1, ob->totcol); ++i) { + Material *ma = give_current_material(ob, i + 1); + + if (ma == NULL) + ma = &defmaterial; + + DRWShadingGroup *shgrp = DRW_shgroup_create(e_data.default_lit, psl->material_pass); + DRW_shgroup_uniform_vec3(shgrp, "diffuse_col", &ma->r, 1); + DRW_shgroup_uniform_vec3(shgrp, "specular_col", &ma->specr, 1); + DRW_shgroup_uniform_short(shgrp, "hardness", &ma->har, 1); + DRW_shgroup_call_add(shgrp, mat_geom[i], ob->obmat); + } } + else { + /* TODO, support for all geometry types (non mesh geometry) */ + DRW_shgroup_call_add(stl->g_data->default_lit_grp, geom, ob->obmat); + // DRW_shgroup_call_add(stl->g_data->shadow_shgrp, geom, ob->obmat); + eevee_cascade_shadow_shgroup(psl, stl, geom, ob->obmat); + eevee_cube_shadow_shgroup(psl, stl, geom, ob->obmat); + } + // GPUMaterial *gpumat = GPU_material_from_nodetree(struct bNodeTree *ntree, ListBase *gpumaterials, void *engine_type, int options) // DRW_shgroup_call_add(stl->g_data->shadow_shgrp, geom, ob->obmat); |