diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-01-09 20:01:56 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-01-09 20:01:56 +0300 |
commit | 9135530f793c478e66ca37b1cc6753faa4faf2e2 (patch) | |
tree | e0c04d32e19487ccaeab5f1f7ad7d227e7242505 /source/blender/draw/engines | |
parent | 9f94f17ea486c1b230e53ee85cc19897385b432f (diff) |
Eevee: Support for dupli lamps without shadows.
Diffstat (limited to 'source/blender/draw/engines')
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_engine.c | 7 | ||||
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_lights.c | 28 |
2 files changed, 18 insertions, 17 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c index f7577b2c07f..7c74b5ef5a0 100644 --- a/source/blender/draw/engines/eevee/eevee_engine.c +++ b/source/blender/draw/engines/eevee/eevee_engine.c @@ -140,12 +140,7 @@ static void eevee_cache_populate(void *vedata, Object *ob) } } else if (ob->type == OB_LAMP) { - if ((ob->base_flag & BASE_FROMDUPLI) != 0) { - /* TODO: Special case for dupli objects because we cannot save the object pointer. */ - } - else { - EEVEE_lights_cache_add(sldata, ob); - } + EEVEE_lights_cache_add(sldata, ob); } } diff --git a/source/blender/draw/engines/eevee/eevee_lights.c b/source/blender/draw/engines/eevee/eevee_lights.c index 22465c04cfa..274aa480473 100644 --- a/source/blender/draw/engines/eevee/eevee_lights.c +++ b/source/blender/draw/engines/eevee/eevee_lights.c @@ -70,6 +70,9 @@ extern char datatoc_shadow_store_frag_glsl[]; extern char datatoc_shadow_copy_frag_glsl[]; extern char datatoc_concentric_samples_lib_glsl[]; +/* Prototype */ +static void eevee_light_setup(Object *ob, EEVEE_Light *evli); + /* *********** FUNCTIONS *********** */ void EEVEE_lights_init(EEVEE_ViewLayerData *sldata) @@ -96,7 +99,8 @@ void EEVEE_lights_init(EEVEE_ViewLayerData *sldata) store_shadow_shader_str, "#define ESM\n"); e_data.shadow_store_cascade_sh[SHADOW_ESM] = DRW_shader_create_fullscreen( - store_shadow_shader_str, "#define ESM\n" + store_shadow_shader_str, + "#define ESM\n" "#define CSM\n"); e_data.shadow_store_cube_sh[SHADOW_VSM] = DRW_shader_create_fullscreen( @@ -114,7 +118,8 @@ void EEVEE_lights_init(EEVEE_ViewLayerData *sldata) "#define ESM\n" "#define COPY\n"); e_data.shadow_copy_cascade_sh[SHADOW_ESM] = DRW_shader_create_fullscreen( - datatoc_shadow_copy_frag_glsl, "#define ESM\n" + datatoc_shadow_copy_frag_glsl, + "#define ESM\n" "#define COPY\n" "#define CSM\n"); @@ -255,6 +260,15 @@ void EEVEE_lights_cache_add(EEVEE_ViewLayerData *sldata, Object *ob) } else { Lamp *la = (Lamp *)ob->data; + EEVEE_Light *evli = linfo->light_data + linfo->num_light; + eevee_light_setup(ob, evli); + + /* We do not support shadowmaps for dupli lamps. */ + if ((ob->base_flag & BASE_FROMDUPLI) != 0) { + linfo->num_light++; + return; + } + EEVEE_LampEngineData *led = EEVEE_lamp_data_ensure(ob); MEM_SAFE_FREE(led->storage); @@ -428,11 +442,8 @@ void EEVEE_lights_cache_finish(EEVEE_ViewLayerData *sldata) } /* Update buffer with lamp data */ -static void eevee_light_setup(Object *ob, EEVEE_LampsInfo *linfo, EEVEE_LampEngineData *led) +static void eevee_light_setup(Object *ob, EEVEE_Light *evli) { - /* TODO only update if data changes */ - EEVEE_LightData *evld = led->storage; - EEVEE_Light *evli = linfo->light_data + evld->light_id; Lamp *la = (Lamp *)ob->data; float mat[4][4], scale[3], power; @@ -896,11 +907,6 @@ void EEVEE_lights_update(EEVEE_ViewLayerData *sldata) eevee_lights_shcaster_updated(sldata, ldata->data); } - for (i = 0; (ob = linfo->light_ref[i]) && (i < MAX_LIGHT); i++) { - EEVEE_LampEngineData *led = EEVEE_lamp_data_ensure(ob); - eevee_light_setup(ob, linfo, led); - } - for (i = 0; (ob = linfo->shadow_cube_ref[i]) && (i < MAX_SHADOW_CUBE); i++) { EEVEE_LampEngineData *led = EEVEE_lamp_data_ensure(ob); eevee_shadow_cube_setup(ob, linfo, led); |