[Bf-blender-cvs] [9135530f793] blender2.8: Eevee: Support for dupli lamps without shadows.

Clément Foucault noreply at git.blender.org
Tue Jan 9 19:01:49 CET 2018


Commit: 9135530f793c478e66ca37b1cc6753faa4faf2e2
Author: Clément Foucault
Date:   Tue Jan 9 18:01:56 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB9135530f793c478e66ca37b1cc6753faa4faf2e2

Eevee: Support for dupli lamps without shadows.

===================================================================

M	source/blender/draw/engines/eevee/eevee_engine.c
M	source/blender/draw/engines/eevee/eevee_lights.c

===================================================================

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);



More information about the Bf-blender-cvs mailing list