Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2017-04-27 08:56:04 +0300
committerCampbell Barton <ideasman42@gmail.com>2017-04-27 08:56:04 +0300
commit4afbd0894191e68b15c74bb750209c4854f465f0 (patch)
tree6cba32fcae36a3c59fc73065ca3a401d7407a256 /source/blender/draw/engines/eevee/eevee_engine.c
parentd8ce3ed140ab5e2f371cc307a0a7de3287b53724 (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.c32
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);