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
path: root/source
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2017-11-29 13:00:50 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2017-11-29 13:07:52 +0300
commit69d33ecdec0d131ede1ed488fc1cf16689c07284 (patch)
tree0524ba73f36ad0d24ff55973354a7107d8e903fe /source
parentdc4c9de91a902b36c0d52a6546e09f649cf42c1e (diff)
Eevee: Stop depsgraph update callback form allocating unneeded memory
Diffstat (limited to 'source')
-rw-r--r--source/blender/draw/engines/eevee/eevee_data.c24
-rw-r--r--source/blender/draw/engines/eevee/eevee_engine.c6
-rw-r--r--source/blender/draw/engines/eevee/eevee_private.h4
-rw-r--r--source/blender/draw/intern/DRW_render.h2
-rw-r--r--source/blender/draw/intern/draw_manager.c20
5 files changed, 53 insertions, 3 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_data.c b/source/blender/draw/engines/eevee/eevee_data.c
index ef1ff026855..d1cd1b1440c 100644
--- a/source/blender/draw/engines/eevee/eevee_data.c
+++ b/source/blender/draw/engines/eevee/eevee_data.c
@@ -78,6 +78,12 @@ static void eevee_lightprobe_data_free(void *storage)
BLI_freelistN(&ped->captured_object_list);
}
+EEVEE_ViewLayerData *EEVEE_view_layer_data_get(void)
+{
+ return (EEVEE_ViewLayerData *)DRW_view_layer_engine_data_get(
+ &draw_engine_eevee_type);
+}
+
EEVEE_ViewLayerData *EEVEE_view_layer_data_ensure(void)
{
EEVEE_ViewLayerData **sldata = (EEVEE_ViewLayerData **)DRW_view_layer_engine_data_ensure(
@@ -90,6 +96,12 @@ EEVEE_ViewLayerData *EEVEE_view_layer_data_ensure(void)
return *sldata;
}
+EEVEE_ObjectEngineData *EEVEE_object_data_get(Object *ob)
+{
+ return (EEVEE_ObjectEngineData *)DRW_object_engine_data_get(
+ ob, &draw_engine_eevee_type);
+}
+
EEVEE_ObjectEngineData *EEVEE_object_data_ensure(Object *ob)
{
EEVEE_ObjectEngineData **oedata = (EEVEE_ObjectEngineData **)DRW_object_engine_data_ensure(
@@ -102,6 +114,12 @@ EEVEE_ObjectEngineData *EEVEE_object_data_ensure(Object *ob)
return *oedata;
}
+EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_get(Object *ob)
+{
+ return (EEVEE_LightProbeEngineData *)DRW_object_engine_data_get(
+ ob, &draw_engine_eevee_type);
+}
+
EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_ensure(Object *ob)
{
EEVEE_LightProbeEngineData **pedata = (EEVEE_LightProbeEngineData **)DRW_object_engine_data_ensure(
@@ -116,6 +134,12 @@ EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_ensure(Object *ob)
return *pedata;
}
+EEVEE_LampEngineData *EEVEE_lamp_data_get(Object *ob)
+{
+ return (EEVEE_LampEngineData *)DRW_object_engine_data_get(
+ ob, &draw_engine_eevee_type);
+}
+
EEVEE_LampEngineData *EEVEE_lamp_data_ensure(Object *ob)
{
EEVEE_LampEngineData **ledata = (EEVEE_LampEngineData **)DRW_object_engine_data_ensure(
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index e505b705f15..8989213baa0 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -290,15 +290,15 @@ static void EEVEE_id_update(void *UNUSED(vedata), ID *id)
const ID_Type id_type = GS(id->name);
if (id_type == ID_OB) {
Object *object = (Object *)id;
- EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(object);
+ EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_get(object);
if (ped != NULL) {
ped->need_full_update = true;
}
- EEVEE_LampEngineData *led = EEVEE_lamp_data_ensure(object);
+ EEVEE_LampEngineData *led = EEVEE_lamp_data_get(object);
if (led != NULL) {
led->need_update = true;
}
- EEVEE_ObjectEngineData *oedata = EEVEE_object_data_ensure(object);
+ EEVEE_ObjectEngineData *oedata = EEVEE_object_data_get(object);
if (oedata != NULL) {
oedata->need_update = true;
}
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index 9d35d1658ea..dc99d941db8 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -640,9 +640,13 @@ typedef struct EEVEE_PrivateData {
} EEVEE_PrivateData; /* Transient data */
/* eevee_data.c */
+EEVEE_ViewLayerData *EEVEE_view_layer_data_get(void);
EEVEE_ViewLayerData *EEVEE_view_layer_data_ensure(void);
+EEVEE_ObjectEngineData *EEVEE_object_data_get(Object *ob);
EEVEE_ObjectEngineData *EEVEE_object_data_ensure(Object *ob);
+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_materials.c */
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index a34485e7e40..0753dbc7a1a 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -384,9 +384,11 @@ struct DefaultTextureList *DRW_viewport_texture_list_get(void);
void DRW_viewport_request_redraw(void);
/* ViewLayers */
+void *DRW_view_layer_engine_data_get(DrawEngineType *engine_type);
void **DRW_view_layer_engine_data_ensure(DrawEngineType *engine_type, void (*callback)(void *storage));
/* Objects */
+void *DRW_object_engine_data_get(Object *ob, DrawEngineType *engine_type);
void **DRW_object_engine_data_ensure(
Object *ob, DrawEngineType *engine_type, void (*callback)(void *storage));
struct LampEngineData *DRW_lamp_engine_data_ensure(Object *ob, struct RenderEngineType *engine_type);
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 9efbf067591..806c8cce4d5 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -2702,6 +2702,16 @@ void DRW_viewport_request_redraw(void)
/** \name ViewLayers (DRW_scenelayer)
* \{ */
+void *DRW_view_layer_engine_data_get(DrawEngineType *engine_type)
+{
+ for (ViewLayerEngineData *sled = DST.draw_ctx.view_layer->drawdata.first; sled; sled = sled->next) {
+ if (sled->engine_type == engine_type) {
+ return sled->storage;
+ }
+ }
+ return NULL;
+}
+
void **DRW_view_layer_engine_data_ensure(DrawEngineType *engine_type, void (*callback)(void *storage))
{
ViewLayerEngineData *sled;
@@ -2728,6 +2738,16 @@ void **DRW_view_layer_engine_data_ensure(DrawEngineType *engine_type, void (*cal
/** \name Objects (DRW_object)
* \{ */
+void *DRW_object_engine_data_get(Object *ob, DrawEngineType *engine_type)
+{
+ for (ObjectEngineData *oed = ob->drawdata.first; oed; oed = oed->next) {
+ if (oed->engine_type == engine_type) {
+ return oed->storage;
+ }
+ }
+ return NULL;
+}
+
void **DRW_object_engine_data_ensure(
Object *ob, DrawEngineType *engine_type, void (*callback)(void *storage))
{