[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