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:
authorClément Foucault <foucault.clem@gmail.com>2018-01-09 20:01:56 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-01-09 20:01:56 +0300
commit9135530f793c478e66ca37b1cc6753faa4faf2e2 (patch)
treee0c04d32e19487ccaeab5f1f7ad7d227e7242505 /source/blender/draw/engines
parent9f94f17ea486c1b230e53ee85cc19897385b432f (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.c7
-rw-r--r--source/blender/draw/engines/eevee/eevee_lights.c28
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);