[Bf-blender-cvs] [d8a7fd10061] temp-eeveelightcache: DRW: Modify the engines code to work with latest changes

Clément Foucault noreply at git.blender.org
Fri Jun 22 17:46:44 CEST 2018


Commit: d8a7fd100610ad830e4627977e474b6633d07e41
Author: Clément Foucault
Date:   Fri Jun 22 17:22:22 2018 +0200
Branches: temp-eeveelightcache
https://developer.blender.org/rBd8a7fd100610ad830e4627977e474b6633d07e41

DRW: Modify the engines code to work with latest changes

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

M	source/blender/draw/engines/eevee/eevee_data.c
M	source/blender/draw/engines/eevee/eevee_engine.c
M	source/blender/draw/engines/eevee/eevee_private.h
M	source/blender/draw/engines/workbench/workbench_deferred.c
M	source/blender/draw/engines/workbench/workbench_forward.c
M	source/blender/draw/engines/workbench/workbench_private.h
M	source/blender/draw/modes/object_mode.c

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

diff --git a/source/blender/draw/engines/eevee/eevee_data.c b/source/blender/draw/engines/eevee/eevee_data.c
index 981913b55f1..74bb7a17eb7 100644
--- a/source/blender/draw/engines/eevee/eevee_data.c
+++ b/source/blender/draw/engines/eevee/eevee_data.c
@@ -100,9 +100,9 @@ EEVEE_ViewLayerData *EEVEE_view_layer_data_ensure(void)
 
 /* Object data. */
 
-static void eevee_object_data_init(ObjectEngineData *engine_data)
+static void eevee_object_data_init(DrawData *dd)
 {
-	EEVEE_ObjectEngineData *eevee_data = (EEVEE_ObjectEngineData *)engine_data;
+	EEVEE_ObjectEngineData *eevee_data = (EEVEE_ObjectEngineData *)dd;
 	eevee_data->shadow_caster_id = -1;
 }
 
@@ -111,15 +111,15 @@ EEVEE_ObjectEngineData *EEVEE_object_data_get(Object *ob)
 	if (ELEM(ob->type, OB_LIGHTPROBE, OB_LAMP)) {
 		return NULL;
 	}
-	return (EEVEE_ObjectEngineData *)DRW_object_engine_data_get(
-	        ob, &draw_engine_eevee_type);
+	return (EEVEE_ObjectEngineData *)DRW_drawdata_get(
+	        &ob->id, &draw_engine_eevee_type);
 }
 
 EEVEE_ObjectEngineData *EEVEE_object_data_ensure(Object *ob)
 {
 	BLI_assert(!ELEM(ob->type, OB_LIGHTPROBE, OB_LAMP));
-	return (EEVEE_ObjectEngineData *)DRW_object_engine_data_ensure(
-	        ob,
+	return (EEVEE_ObjectEngineData *)DRW_drawdata_ensure(
+	        &ob->id,
 	        &draw_engine_eevee_type,
 	        sizeof(EEVEE_ObjectEngineData),
 	        eevee_object_data_init,
@@ -128,16 +128,16 @@ EEVEE_ObjectEngineData *EEVEE_object_data_ensure(Object *ob)
 
 /* Light probe data. */
 
-static void eevee_lightprobe_data_init(ObjectEngineData *engine_data)
+static void eevee_lightprobe_data_init(DrawData *dd)
 {
-	EEVEE_LightProbeEngineData *ped = (EEVEE_LightProbeEngineData *)engine_data;
+	EEVEE_LightProbeEngineData *ped = (EEVEE_LightProbeEngineData *)dd;
 	ped->need_full_update = true;
 	ped->need_update = true;
 }
 
-static void eevee_lightprobe_data_free(ObjectEngineData *engine_data)
+static void eevee_lightprobe_data_free(DrawData *dd)
 {
-	EEVEE_LightProbeEngineData *ped = (EEVEE_LightProbeEngineData *)engine_data;
+	EEVEE_LightProbeEngineData *ped = (EEVEE_LightProbeEngineData *)dd;
 
 	BLI_freelistN(&ped->captured_object_list);
 }
@@ -147,15 +147,15 @@ EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_get(Object *ob)
 	if (ob->type != OB_LIGHTPROBE) {
 		return NULL;
 	}
-	return (EEVEE_LightProbeEngineData *)DRW_object_engine_data_get(
-	        ob, &draw_engine_eevee_type);
+	return (EEVEE_LightProbeEngineData *)DRW_drawdata_get(
+	        &ob->id, &draw_engine_eevee_type);
 }
 
 EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_ensure(Object *ob)
 {
 	BLI_assert(ob->type == OB_LIGHTPROBE);
-	return (EEVEE_LightProbeEngineData *)DRW_object_engine_data_ensure(
-	        ob,
+	return (EEVEE_LightProbeEngineData *)DRW_drawdata_ensure(
+	        &ob->id,
 	        &draw_engine_eevee_type,
 	        sizeof(EEVEE_LightProbeEngineData),
 	        eevee_lightprobe_data_init,
@@ -164,9 +164,9 @@ EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_ensure(Object *ob)
 
 /* Lamp data. */
 
-static void eevee_lamp_data_init(ObjectEngineData *engine_data)
+static void eevee_lamp_data_init(DrawData *dd)
 {
-	EEVEE_LampEngineData *led = (EEVEE_LampEngineData *)engine_data;
+	EEVEE_LampEngineData *led = (EEVEE_LampEngineData *)dd;
 	led->need_update = true;
 	led->prev_cube_shadow_id = -1;
 }
@@ -176,17 +176,41 @@ EEVEE_LampEngineData *EEVEE_lamp_data_get(Object *ob)
 	if (ob->type != OB_LAMP) {
 		return NULL;
 	}
-	return (EEVEE_LampEngineData *)DRW_object_engine_data_get(
-	        ob, &draw_engine_eevee_type);
+	return (EEVEE_LampEngineData *)DRW_drawdata_get(
+	        &ob->id, &draw_engine_eevee_type);
 }
 
 EEVEE_LampEngineData *EEVEE_lamp_data_ensure(Object *ob)
 {
 	BLI_assert(ob->type == OB_LAMP);
-	return (EEVEE_LampEngineData *)DRW_object_engine_data_ensure(
-	        ob,
+	return (EEVEE_LampEngineData *)DRW_drawdata_ensure(
+	        &ob->id,
 	        &draw_engine_eevee_type,
 	        sizeof(EEVEE_LampEngineData),
 	        eevee_lamp_data_init,
 	        NULL);
 }
+
+/* World data. */
+
+static void eevee_world_data_init(DrawData *dd)
+{
+	EEVEE_WorldEngineData *wed = (EEVEE_WorldEngineData *)dd;
+	wed->dd.recalc |= 1;
+}
+
+EEVEE_WorldEngineData *EEVEE_world_data_get(World *wo)
+{
+	return (EEVEE_WorldEngineData *)DRW_drawdata_get(
+	        &wo->id, &draw_engine_eevee_type);
+}
+
+EEVEE_WorldEngineData *EEVEE_world_data_ensure(World *wo)
+{
+	return (EEVEE_WorldEngineData *)DRW_drawdata_ensure(
+	        &wo->id,
+	        &draw_engine_eevee_type,
+	        sizeof(EEVEE_WorldEngineData),
+	        eevee_world_data_init,
+	        NULL);
+}
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index b2aebdbd762..7538941862d 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -374,19 +374,34 @@ static void eevee_id_object_update(void *UNUSED(vedata), Object *object)
 {
 	/* This is a bit mask of components which update is to be ignored. */
 	EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_get(object);
-	if (ped != NULL && ped->engine_data.recalc != 0) {
+	if (ped != NULL && ped->dd.recalc != 0) {
 		ped->need_full_update = true;
-		ped->engine_data.recalc = 0;
+		ped->dd.recalc = 0;
 	}
 	EEVEE_LampEngineData *led = EEVEE_lamp_data_get(object);
-	if (led != NULL && led->engine_data.recalc != 0) {
+	if (led != NULL && led->dd.recalc != 0) {
 		led->need_update = true;
-		led->engine_data.recalc = 0;
+		led->dd.recalc = 0;
 	}
 	EEVEE_ObjectEngineData *oedata = EEVEE_object_data_get(object);
-	if (oedata != NULL && oedata->engine_data.recalc != 0) {
+	if (oedata != NULL && oedata->dd.recalc != 0) {
 		oedata->need_update = true;
-		oedata->engine_data.recalc = 0;
+		oedata->dd.recalc = 0;
+	}
+}
+
+static void eevee_id_world_update(void *vedata, World *wo)
+{
+	EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
+	EEVEE_LightCache *lcache = stl->g_data->light_cache;
+
+	EEVEE_WorldEngineData *wedata = EEVEE_world_data_ensure(wo);
+
+	if (wedata != NULL && wedata->dd.recalc != 0) {
+		if ((lcache->flag & (LIGHTCACHE_BAKED | LIGHTCACHE_BAKING)) == 0) {
+			lcache->flag |= LIGHTCACHE_UPDATE_WORLD;
+		}
+		wedata->dd.recalc = 0;
 	}
 }
 
@@ -394,6 +409,9 @@ static void eevee_id_update(void *vedata, ID *id)
 {
 	/* Handle updates based on ID type. */
 	switch (GS(id->name)) {
+		case ID_WO:
+			eevee_id_world_update(vedata, (World *)id);
+			break;
 		case ID_OB:
 			eevee_id_object_update(vedata, (Object *)id);
 			break;
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index 1b3f57ba85c..bec238108a5 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -696,7 +696,7 @@ typedef struct EEVEE_ShadowCascadeData {
  * It works with even if the object is in multiple layers
  * because we don't get the same "Object *" for each layer. */
 typedef struct EEVEE_LampEngineData {
-	ObjectEngineData engine_data;
+	DrawData dd;
 
 	bool need_update;
 	/* This needs to be out of the union to avoid undefined behaviour. */
@@ -709,7 +709,7 @@ typedef struct EEVEE_LampEngineData {
 } EEVEE_LampEngineData;
 
 typedef struct EEVEE_LightProbeEngineData {
-	ObjectEngineData engine_data;
+	DrawData dd;
 
 	/* NOTE: need_full_update is set by dependency graph when the probe or it's
 	 * object is updated. This triggers full probe update, including it's
@@ -737,7 +737,7 @@ typedef struct EEVEE_LightProbeEngineData {
 } EEVEE_LightProbeEngineData;
 
 typedef struct EEVEE_ObjectEngineData {
-	ObjectEngineData engine_data;
+	DrawData dd;
 
 	Object *ob; /* self reference */
 	bool ob_vis, ob_vis_dirty;
@@ -746,6 +746,10 @@ typedef struct EEVEE_ObjectEngineData {
 	uint shadow_caster_id;
 } EEVEE_ObjectEngineData;
 
+typedef struct EEVEE_WorldEngineData {
+	DrawData dd;
+} EEVEE_WorldEngineData;
+
 /* ************ Light Cache ********** */
 
 typedef struct EEVEE_LightCache {
@@ -828,6 +832,8 @@ EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_get(Object *ob);
 EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_ensure(Object *ob);
 EEVEE_LampEngineData *EEVEE_lamp_data_get(Object *ob);
 EEVEE_LampEngineData *EEVEE_lamp_data_ensure(Object *ob);
+EEVEE_WorldEngineData *EEVEE_world_data_get(World *wo);
+EEVEE_WorldEngineData *EEVEE_world_data_ensure(World *wo);
 
 /* eevee_materials.c */
 struct GPUTexture *EEVEE_materials_get_util_tex(void); /* XXX */
diff --git a/source/blender/draw/engines/workbench/workbench_deferred.c b/source/blender/draw/engines/workbench/workbench_deferred.c
index 3bf7c34d5eb..454210cb6c6 100644
--- a/source/blender/draw/engines/workbench/workbench_deferred.c
+++ b/source/blender/draw/engines/workbench/workbench_deferred.c
@@ -262,9 +262,9 @@ static struct GPUTexture *create_jitter_texture(int num_samples)
 /* Functions */
 
 
-static void workbench_init_object_data(ObjectEngineData *engine_data)
+static void workbench_init_object_data(DrawData *dd)
 {
-	WORKBENCH_ObjectData *data = (WORKBENCH_ObjectData *)engine_data;
+	WORKBENCH_ObjectData *data = (WORKBENCH_ObjectData *)dd;
 	data->object_id = ((e_data.next_object_id++) & 0xff) + 1;
 	data->shadow_bbox_dirty = true;
 }
@@ -567,8 +567,8 @@ static WORKBENCH_MaterialData *get_or_create_material_data(
 	WORKBENCH_PassList *psl = vedata->psl;
 	WORKBENCH_PrivateData *wpd = stl->g_data;
 	WORKBENCH_MaterialData *material;
-	WORKBENCH_ObjectData *engine_object_data = (WORKBENCH_ObjectData *)DRW_object_engine_data_ensure(
-	        ob, &draw_engine_workbench_solid, sizeof(WORKBENCH_ObjectData), &workbench_init_object_data, NULL);
+	WORKBENCH_ObjectData *engine_object_data = (WORKBENCH_ObjectData *)DRW_drawdata_ensure(
+	        &ob->id, &draw_engine_workbench_solid, sizeof(WORKBENCH_ObjectData), &workbench_init_object_data, NULL);
 	WORKBENCH_MaterialData material_template;
 
 	/* Solid */
@@ -768,8 +768,8 @@ void workbench_deferred_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob)
 					// DRW_shgroup_call_sculpt_add(wpd->shadow_shgrp, ob, ob->obmat);
 				}
 				else {
-					WORKBENCH_ObjectData *engine_object_data = (WORKBE

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list