[Bf-blender-cvs] [2851e91db41] blender2.8: Eevee: Cleanup. Group data functions into one file.

Clément Foucault noreply at git.blender.org
Sat Jun 3 01:43:54 CEST 2017


Commit: 2851e91db41c45806ca3ed87c8363c44b2d60521
Author: Clément Foucault
Date:   Sat Jun 3 00:53:47 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB2851e91db41c45806ca3ed87c8363c44b2d60521

Eevee: Cleanup. Group data functions into one file.

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

M	source/blender/draw/CMakeLists.txt
A	source/blender/draw/engines/eevee/eevee_data.c
M	source/blender/draw/engines/eevee/eevee_engine.c
M	source/blender/draw/engines/eevee/eevee_lights.c
M	source/blender/draw/engines/eevee/eevee_private.h
M	source/blender/draw/engines/eevee/eevee_probes.c

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

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index a8a6d3144ca..a7aabeb4662 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -80,6 +80,7 @@ set(SRC
 	modes/sculpt_mode.c
 	engines/basic/basic_engine.c
 	engines/clay/clay_engine.c
+	engines/eevee/eevee_data.c
 	engines/eevee/eevee_engine.c
 	engines/eevee/eevee_lights.c
 	engines/eevee/eevee_probes.c
diff --git a/source/blender/draw/engines/eevee/eevee_data.c b/source/blender/draw/engines/eevee/eevee_data.c
new file mode 100644
index 00000000000..66cb82ae277
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_data.c
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/* All specific data handler for Objects, Lights, SceneLayers, ...
+ */
+
+/** \file eevee_data.c
+ *  \ingroup draw_engine
+ */
+
+#include "DRW_render.h"
+
+#include "eevee_private.h"
+
+static void eevee_scene_layer_data_free(void *storage)
+{
+	EEVEE_SceneLayerData *sldata = (EEVEE_SceneLayerData *)storage;
+
+	/* Lights */
+	MEM_SAFE_FREE(sldata->lamps);
+	DRW_UBO_FREE_SAFE(sldata->light_ubo);
+	DRW_UBO_FREE_SAFE(sldata->shadow_ubo);
+	DRW_UBO_FREE_SAFE(sldata->shadow_render_ubo);
+	DRW_FRAMEBUFFER_FREE_SAFE(sldata->shadow_cube_target_fb);
+	DRW_FRAMEBUFFER_FREE_SAFE(sldata->shadow_cube_fb);
+	DRW_FRAMEBUFFER_FREE_SAFE(sldata->shadow_map_fb);
+	DRW_FRAMEBUFFER_FREE_SAFE(sldata->shadow_cascade_fb);
+	DRW_TEXTURE_FREE_SAFE(sldata->shadow_depth_cube_target);
+	DRW_TEXTURE_FREE_SAFE(sldata->shadow_color_cube_target);
+	DRW_TEXTURE_FREE_SAFE(sldata->shadow_depth_cube_pool);
+	DRW_TEXTURE_FREE_SAFE(sldata->shadow_depth_map_pool);
+	DRW_TEXTURE_FREE_SAFE(sldata->shadow_depth_cascade_pool);
+	BLI_freelistN(&sldata->shadow_casters);
+
+	/* Probes */
+	MEM_SAFE_FREE(sldata->probes);
+	DRW_UBO_FREE_SAFE(sldata->probe_ubo);
+	DRW_FRAMEBUFFER_FREE_SAFE(sldata->probe_fb);
+	DRW_FRAMEBUFFER_FREE_SAFE(sldata->probe_filter_fb);
+	DRW_FRAMEBUFFER_FREE_SAFE(sldata->probe_sh_fb);
+	DRW_TEXTURE_FREE_SAFE(sldata->probe_rt);
+	DRW_TEXTURE_FREE_SAFE(sldata->probe_depth_rt);
+	DRW_TEXTURE_FREE_SAFE(sldata->probe_pool);
+	DRW_TEXTURE_FREE_SAFE(sldata->probe_sh);
+}
+
+static void eevee_lamp_data_free(void *storage)
+{
+	EEVEE_LampEngineData *led = (EEVEE_LampEngineData *)storage;
+
+	MEM_SAFE_FREE(led->storage);
+	BLI_freelistN(&led->shadow_caster_list);
+}
+
+EEVEE_SceneLayerData *EEVEE_scene_layer_data_get(void)
+{
+	EEVEE_SceneLayerData **sldata = (EEVEE_SceneLayerData **)DRW_scene_layer_engine_data_get(&draw_engine_eevee_type, &eevee_scene_layer_data_free);
+
+	if (*sldata == NULL) {
+		*sldata = MEM_callocN(sizeof(**sldata), "EEVEE_SceneLayerData");
+	}
+
+	return *sldata;
+}
+
+EEVEE_ObjectEngineData *EEVEE_object_data_get(Object *ob)
+{
+	EEVEE_ObjectEngineData **oedata = (EEVEE_ObjectEngineData **)DRW_object_engine_data_get(ob, &draw_engine_eevee_type, NULL);
+
+	if (*oedata == NULL) {
+		*oedata = MEM_callocN(sizeof(**oedata), "EEVEE_ObjectEngineData");
+	}
+
+	return *oedata;
+}
+
+EEVEE_LampEngineData *EEVEE_lamp_data_get(Object *ob)
+{
+	EEVEE_LampEngineData **ledata = (EEVEE_LampEngineData **)DRW_object_engine_data_get(ob, &draw_engine_eevee_type, &eevee_lamp_data_free);
+
+	if (*ledata == NULL) {
+		*ledata = MEM_callocN(sizeof(**ledata), "EEVEE_LampEngineData");
+		(*ledata)->need_update = true;
+	}
+
+	return *ledata;
+}
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index 3e2b47819d7..ab8923109e9 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -88,9 +88,6 @@ extern char datatoc_background_vert_glsl[];
 extern Material defmaterial;
 extern GlobalsUboStorage ts;
 
-/* Prototypes */
-static void EEVEE_scene_layer_data_free(void *storage);
-
 static struct GPUTexture *create_jitter_texture(int w, int h)
 {
 	struct GPUTexture *tex;
@@ -190,11 +187,7 @@ static void EEVEE_engine_init(void *ved)
 	EEVEE_Data *vedata = (EEVEE_Data *)ved;
 	EEVEE_TextureList *txl = vedata->txl;
 	EEVEE_FramebufferList *fbl = vedata->fbl;
-	EEVEE_SceneLayerData **sldata = (EEVEE_SceneLayerData **)DRW_scene_layer_engine_data_get(&draw_engine_eevee_type, &EEVEE_scene_layer_data_free);
-
-	if (*sldata == NULL) {
-		*sldata = MEM_callocN(sizeof(EEVEE_SceneLayerData), "EEVEE_SceneLayerData");
-	}
+	EEVEE_SceneLayerData *sldata = EEVEE_scene_layer_data_get();
 
 	DRWFboTexture tex = {&txl->color, DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER};
 
@@ -266,9 +259,9 @@ static void EEVEE_engine_init(void *ved)
 		copy_v3_v3(e_data.camera_pos, viewinvmat[3]);
 	}
 
-	EEVEE_lights_init(*sldata);
+	EEVEE_lights_init(sldata);
 
-	EEVEE_probes_init(*sldata);
+	EEVEE_probes_init(sldata);
 
 	EEVEE_effects_init(vedata);
 
@@ -291,7 +284,7 @@ static void EEVEE_cache_init(void *vedata)
 
 	EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
 	EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
-	EEVEE_SceneLayerData *sldata = *(EEVEE_SceneLayerData **)DRW_scene_layer_engine_data_get(&draw_engine_eevee_type, &EEVEE_scene_layer_data_free);
+	EEVEE_SceneLayerData *sldata = EEVEE_scene_layer_data_get();
 
 
 	if (!stl->g_data) {
@@ -441,22 +434,11 @@ static void EEVEE_cache_init(void *vedata)
 	EEVEE_effects_cache_init(vedata);
 }
 
-EEVEE_ObjectEngineData *EEVEE_get_object_engine_data(Object *ob)
-{
-	EEVEE_ObjectEngineData **oedata = (EEVEE_ObjectEngineData **)DRW_object_engine_data_get(ob, &draw_engine_eevee_type, NULL);
-
-	if (*oedata == NULL) {
-		*oedata = MEM_callocN(sizeof(**oedata), "EEVEE_ObjectEngineData");
-	}
-
-	return *oedata;
-}
-
 static void EEVEE_cache_populate(void *vedata, Object *ob)
 {
 	EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
 	EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
-	EEVEE_SceneLayerData *sldata = *(EEVEE_SceneLayerData **)DRW_scene_layer_engine_data_get(&draw_engine_eevee_type, &EEVEE_scene_layer_data_free);
+	EEVEE_SceneLayerData *sldata = EEVEE_scene_layer_data_get();
 
 	const DRWContextState *draw_ctx = DRW_context_state_get();
 	const bool is_active = (ob == draw_ctx->obact);
@@ -577,7 +559,7 @@ static void EEVEE_cache_populate(void *vedata, Object *ob)
 		if (cast_shadow) {
 			EEVEE_lights_cache_shcaster_add(sldata, psl, geom, ob->obmat);
 			BLI_addtail(&sldata->shadow_casters, BLI_genericNodeN(ob));
-			EEVEE_ObjectEngineData *oedata = EEVEE_get_object_engine_data(ob);
+			EEVEE_ObjectEngineData *oedata = EEVEE_object_data_get(ob);
 			oedata->need_update = ((ob->deg_update_flag & DEG_RUNTIME_DATA_UPDATE) != 0);
 		}
 	}
@@ -601,7 +583,7 @@ static void eevee_bind_shadow(void *data, DRWShadingGroup *shgrp)
 static void EEVEE_cache_finish(void *vedata)
 {
 	EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
-	EEVEE_SceneLayerData *sldata = *(EEVEE_SceneLayerData **)DRW_scene_layer_engine_data_get(&draw_engine_eevee_type, &EEVEE_scene_layer_data_free);
+	EEVEE_SceneLayerData *sldata = EEVEE_scene_layer_data_get();
 
 	EEVEE_lights_cache_finish(sldata);
 	EEVEE_probes_cache_finish(sldata);
@@ -620,7 +602,7 @@ static void EEVEE_draw_scene(void *vedata)
 {
 	EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
 	EEVEE_FramebufferList *fbl = ((EEVEE_Data *)vedata)->fbl;
-	EEVEE_SceneLayerData *sldata = *(EEVEE_SceneLayerData **)DRW_scene_layer_engine_data_get(&draw_engine_eevee_type, &EEVEE_scene_layer_data_free);
+	EEVEE_SceneLayerData *sldata = EEVEE_scene_layer_data_get();
 
 	/* Default framebuffer and texture */
 	DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
@@ -664,13 +646,6 @@ static void EEVEE_engine_free(void)
 	DRW_TEXTURE_FREE_SAFE(e_data.jitter);
 }
 
-static void EEVEE_scene_layer_data_free(void *storage)
-{
-	EEVEE_SceneLayerData *sldata = (EEVEE_SceneLayerData *)storage;
-	EEVEE_scene_layer_lights_free(sldata);
-	EEVEE_scene_layer_probes_free(sldata);
-}
-
 static void EEVEE_layer_collection_settings_create(RenderEngine *UNUSED(engine), IDProperty *props)
 {
 	BLI_assert(props &&
diff --git a/source/blender/draw/engines/eevee/eevee_lights.c b/source/blender/draw/engines/eevee/eevee_lights.c
index 1685d71dfbe..0c27ede2148 100644
--- a/source/blender/draw/engines/eevee/eevee_lights.c
+++ b/source/blender/draw/engines/eevee/eevee_lights.c
@@ -69,25 +69,6 @@ extern char datatoc_shadow_store_frag_glsl[];
 
 /* *********** FUNCTIONS *********** */
 
-static void eevee_lamp_engine_data_free(void *storage)
-{
-	EEVEE_LampEngineData *led = (EEVEE_LampEngineData *)storage;
-	MEM_SAFE_FREE(led->storage);
-	BLI_freelistN(&led->shadow_caster_list);
-}
-
-static EEVEE_LampEngineData *eevee_get_lamp_engine_data(Object *ob)
-{
-	EEVEE_LampEngineData **ledata = (EEVEE_LampEngineData **)DRW_object_engine_data_get(ob, &draw_engine_eevee_type, &eevee_lamp_engine_data_free);
-
-	if (*ledata == NULL) {
-		*ledata = MEM_callocN(sizeof(**ledata), "EEVEE_LampEngineData");
-		(*ledata)->need_update = true;
-	}
-
-	return *ledata;
-}
-
 void EEVEE_lights_init(EEVEE_SceneLayerData *sldata)
 {
 	const unsigned int shadow_ubo_size = sizeof(EEVEE_ShadowCube) * MAX_SHADOW_CUBE +
@@ -152,7 +133,7 @@ void EEVEE_lights_cache_add(EEVEE_SceneLayerData *sldata, Object *ob)
 	}
 	else {
 		Lamp *la = (Lamp *)ob->data;
-		EEVEE_LampEngineData *led = eevee_get_lamp_engine_data(ob);
+		EEVEE_LampEngineData *led = EEVEE_lamp_data_get(ob);
 
 		if ((ob->deg_update_flag & DEG_RUNTIME_DATA_UPDATE) != 0) {
 			led->need_update = true;
@@ -633,7 +614,7

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list