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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to