[Bf-blender-cvs] [e54d8eeab2e] blender2.8: Draw Manager: Make Viewport Data passed by the manager call.

Clément Foucault noreply at git.blender.org
Mon Mar 27 14:08:51 CEST 2017


Commit: e54d8eeab2eac9b98bb57a886eb334a812f6487a
Author: Clément Foucault
Date:   Sun Mar 26 19:10:53 2017 +0200
Branches: blender2.8
https://developer.blender.org/rBe54d8eeab2eac9b98bb57a886eb334a812f6487a

Draw Manager: Make Viewport Data passed by the manager call.

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

M	source/blender/draw/engines/clay/clay.c
M	source/blender/draw/engines/eevee/eevee.c
M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_manager.c
M	source/blender/draw/modes/edit_armature_mode.c
M	source/blender/draw/modes/edit_curve_mode.c
M	source/blender/draw/modes/edit_lattice_mode.c
M	source/blender/draw/modes/edit_mesh_mode.c
M	source/blender/draw/modes/edit_metaball_mode.c
M	source/blender/draw/modes/edit_surface_mode.c
M	source/blender/draw/modes/edit_text_mode.c
M	source/blender/draw/modes/object_mode.c
M	source/blender/draw/modes/paint_texture_mode.c
M	source/blender/draw/modes/paint_vertex_mode.c
M	source/blender/draw/modes/paint_weight_mode.c
M	source/blender/draw/modes/particle_mode.c
M	source/blender/draw/modes/pose_mode.c
M	source/blender/draw/modes/sculpt_mode.c

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

diff --git a/source/blender/draw/engines/clay/clay.c b/source/blender/draw/engines/clay/clay.c
index 9a2cab12730..750e6f4ebfe 100644
--- a/source/blender/draw/engines/clay/clay.c
+++ b/source/blender/draw/engines/clay/clay.c
@@ -275,12 +275,11 @@ RenderEngineSettings *CLAY_render_settings_create(void)
 	return (RenderEngineSettings *)settings;
 }
 
-static void CLAY_engine_init(void)
+static void CLAY_engine_init(void *vedata)
 {
-	CLAY_Data *ved = DRW_viewport_engine_data_get("Clay");
-	CLAY_StorageList *stl = ved->stl;
-	CLAY_TextureList *txl = ved->txl;
-	CLAY_FramebufferList *fbl = ved->fbl;
+	CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
+	CLAY_TextureList *txl = ((CLAY_Data *)vedata)->txl;
+	CLAY_FramebufferList *fbl = ((CLAY_Data *)vedata)->fbl;
 
 	/* Create Texture Array */
 	if (!e_data.matcap_array) {
@@ -433,10 +432,9 @@ static void CLAY_engine_init(void)
 	}
 }
 
-static DRWShadingGroup *CLAY_shgroup_create(DRWPass *pass, int *material_id)
+static DRWShadingGroup *CLAY_shgroup_create(CLAY_Data *vedata, DRWPass *pass, int *material_id)
 {
-	CLAY_Data *vedata = DRW_viewport_engine_data_get("Clay");
-	CLAY_TextureList *txl = vedata->txl;
+	CLAY_TextureList *txl = ((CLAY_Data *)vedata)->txl;
 	const int depthloc = 0, matcaploc = 1, jitterloc = 2, sampleloc = 3;
 
 	DRWShadingGroup *grp = DRW_shgroup_create(e_data.clay_sh, pass);
@@ -556,7 +554,7 @@ static void override_setting(CollectionEngineSettings *ces, const char *name, vo
 	}
 }
 
-static DRWShadingGroup *CLAY_object_shgrp_get(Object *ob, CLAY_StorageList *stl, CLAY_PassList *psl)
+static DRWShadingGroup *CLAY_object_shgrp_get(CLAY_Data *vedata, Object *ob, CLAY_StorageList *stl, CLAY_PassList *psl)
 {
 	DRWShadingGroup **shgrps = stl->storage->shgrps;
 	MaterialEngineSettingsClay *settings = DRW_render_settings_get(NULL, RE_engine_id_BLENDER_CLAY);
@@ -591,7 +589,7 @@ static DRWShadingGroup *CLAY_object_shgrp_get(Object *ob, CLAY_StorageList *stl,
 	                    ssao_attenuation, matcap_icon);
 
 	if (shgrps[id] == NULL) {
-		shgrps[id] = CLAY_shgroup_create(psl->clay_pass, &e_data.ubo_mat_idxs[id]);
+		shgrps[id] = CLAY_shgroup_create(vedata, psl->clay_pass, &e_data.ubo_mat_idxs[id]);
 		/* if it's the first shgrp, pass bind the material UBO */
 		if (stl->storage->ubo_current_id == 1) {
 			DRW_shgroup_uniform_block(shgrps[0], "material_block", stl->mat_ubo, 0);
@@ -601,11 +599,10 @@ static DRWShadingGroup *CLAY_object_shgrp_get(Object *ob, CLAY_StorageList *stl,
 	return shgrps[id];
 }
 
-static void CLAY_cache_init(void)
+static void CLAY_cache_init(void *vedata)
 {
-	g_data.vedata = DRW_viewport_engine_data_get("Clay");
-	CLAY_PassList *psl = g_data.vedata->psl;
-	CLAY_StorageList *stl = g_data.vedata->stl;
+	CLAY_PassList *psl = ((CLAY_Data *)vedata)->psl;
+	CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
 
 	/* Depth Pass */
 	{
@@ -624,10 +621,10 @@ static void CLAY_cache_init(void)
 	}
 }
 
-static void CLAY_cache_populate(Object *ob)
+static void CLAY_cache_populate(void *vedata, Object *ob)
 {
-	CLAY_PassList *psl = g_data.vedata->psl;
-	CLAY_StorageList *stl = g_data.vedata->stl;
+	CLAY_PassList *psl = ((CLAY_Data *)vedata)->psl;
+	CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
 
 	struct Batch *geom;
 	DRWShadingGroup *clay_shgrp;
@@ -646,23 +643,23 @@ static void CLAY_cache_populate(Object *ob)
 		DRW_shgroup_call_add((do_cull) ? g_data.depth_shgrp_cull : g_data.depth_shgrp, geom, ob->obmat);
 
 		/* Shading */
-		clay_shgrp = CLAY_object_shgrp_get(ob, stl, psl);
+		clay_shgrp = CLAY_object_shgrp_get(vedata, ob, stl, psl);
 		DRW_shgroup_call_add(clay_shgrp, geom, ob->obmat);
 	}
 }
 
-static void CLAY_cache_finish(void)
+static void CLAY_cache_finish(void *vedata)
 {
-	CLAY_StorageList *stl = g_data.vedata->stl;
+	CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
 
 	DRW_uniformbuffer_update(stl->mat_ubo, &stl->storage->mat_storage);
 }
 
-static void CLAY_draw_scene(void)
+static void CLAY_draw_scene(void *vedata)
 {
-	CLAY_Data *ved = DRW_viewport_engine_data_get("Clay");
-	CLAY_PassList *psl = ved->psl;
-	CLAY_FramebufferList *fbl = ved->fbl;
+
+	CLAY_PassList *psl = ((CLAY_Data *)vedata)->psl;
+	CLAY_FramebufferList *fbl = ((CLAY_Data *)vedata)->fbl;
 	DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
 
 	/* Pass 1 : Depth pre-pass */
diff --git a/source/blender/draw/engines/eevee/eevee.c b/source/blender/draw/engines/eevee/eevee.c
index 2f058e3e6e3..bb17a6b46b0 100644
--- a/source/blender/draw/engines/eevee/eevee.c
+++ b/source/blender/draw/engines/eevee/eevee.c
@@ -54,12 +54,11 @@ extern char datatoc_tonemap_frag_glsl[];
 
 /* *********** FUNCTIONS *********** */
 
-static void EEVEE_engine_init(void)
+static void EEVEE_engine_init(void *vedata)
 {
-	EEVEE_Data *ved = DRW_viewport_engine_data_get(EEVEE_ENGINE);
-	EEVEE_TextureList *txl = ved->txl;
-	EEVEE_FramebufferList *fbl = ved->fbl;
-	EEVEE_StorageList *stl = ved->stl;
+	EEVEE_TextureList *txl = ((EEVEE_Data *)vedata)->txl;
+	EEVEE_FramebufferList *fbl = ((EEVEE_Data *)vedata)->fbl;
+	EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
 
 	DRWFboTexture tex = {&txl->color, DRW_BUF_RGBA_32};
 
@@ -79,7 +78,6 @@ static void EEVEE_engine_init(void)
 	if (!e_data.tonemap) {
 		e_data.tonemap = DRW_shader_create_fullscreen(datatoc_tonemap_frag_glsl, NULL);
 	}
-	UNUSED_VARS(stl);
 
 	if (stl->lights_info == NULL)
 		EEVEE_lights_init(stl);
@@ -87,12 +85,11 @@ static void EEVEE_engine_init(void)
 	// EEVEE_lights_update(stl);
 }
 
-static void EEVEE_cache_init(void)
+static void EEVEE_cache_init(void *vedata)
 {
-	g_data.vedata = DRW_viewport_engine_data_get(EEVEE_ENGINE);
-	EEVEE_PassList *psl = g_data.vedata->psl;
-	EEVEE_TextureList *txl = g_data.vedata->txl;
-	EEVEE_StorageList *stl = g_data.vedata->stl;
+	EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
+	EEVEE_TextureList *txl = ((EEVEE_Data *)vedata)->txl;
+	EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
 
 	{
 		psl->depth_pass = DRW_pass_create("Depth Pass", DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
@@ -138,9 +135,9 @@ static void EEVEE_cache_init(void)
 	EEVEE_lights_cache_init(stl);
 }
 
-static void EEVEE_cache_populate(Object *ob)
+static void EEVEE_cache_populate(void *vedata, Object *ob)
 {
-	EEVEE_StorageList *stl = g_data.vedata->stl;
+	EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
 
 	if (ob->type == OB_MESH) {
 		CollectionEngineSettings *ces_mode_ob = BKE_object_collection_engine_get(ob, COLLECTION_MODE_OBJECT, "");
@@ -163,18 +160,17 @@ static void EEVEE_cache_populate(Object *ob)
 	}
 }
 
-static void EEVEE_cache_finish(void)
+static void EEVEE_cache_finish(void *vedata)
 {
-	EEVEE_StorageList *stl = g_data.vedata->stl;
+	EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
 
 	EEVEE_lights_cache_finish(stl);
 }
 
-static void EEVEE_draw_scene(void)
+static void EEVEE_draw_scene(void *vedata)
 {
-	EEVEE_Data *ved = DRW_viewport_engine_data_get(EEVEE_ENGINE);
-	EEVEE_PassList *psl = ved->psl;
-	EEVEE_FramebufferList *fbl = ved->fbl;
+	EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
+	EEVEE_FramebufferList *fbl = ((EEVEE_Data *)vedata)->fbl;
 
 	/* Default framebuffer and texture */
 	DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
@@ -218,7 +214,7 @@ static void EEVEE_collection_settings_create(RenderEngine *UNUSED(engine), Colle
 
 DrawEngineType draw_engine_eevee_type = {
 	NULL, NULL,
-	N_("Clay"),
+	N_("Eevee"),
 	&EEVEE_engine_init,
 	&EEVEE_engine_free,
 	&EEVEE_cache_init,
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 3aabb92be79..1f74ca5981a 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -72,15 +72,15 @@ typedef struct DrawEngineType {
 
 	char idname[32];
 
-	void (*engine_init)(void);
+	void (*engine_init)(void *vedata);
 	void (*engine_free)(void);
 
-	void (*cache_init)(void);
-	void (*cache_populate)(struct Object *ob);
-	void (*cache_finish)(void);
+	void (*cache_init)(void *vedata);
+	void (*cache_populate)(void *vedata, struct Object *ob);
+	void (*cache_finish)(void *vedata);
 
-	void (*draw_background)(void);
-	void (*draw_scene)(void);
+	void (*draw_background)(void *vedata);
+	void (*draw_scene)(void *vedata);
 } DrawEngineType;
 
 #ifndef __DRW_ENGINE_H__
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index ee51ec4276f..43a0937a2f5 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -1394,8 +1394,9 @@ static void DRW_engines_init(void)
 {
 	for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
 		DrawEngineType *engine = link->data;
+		ViewportEngineData *data = DRW_viewport_engine_data_get(engine->idname);
 		if (engine->engine_init) {
-			engine->engine_init();
+			engine->engine_init(data);
 		}
 	}
 }
@@ -1404,8 +1405,9 @@ static void DRW_engines_cache_init(void)
 {
 	for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
 		DrawEngineType *engine = link->data;
+		ViewportEngineData *data = DRW_viewport_engine_data_get(engine->idname);
 		if (engine->cache_init) {
-			engine->cache_init();
+			engine->cache_init(data);
 		}
 	}
 }
@@ -1414,8 +1416,9 @@ static void DRW_engines_cache_populate(Object *ob)
 {
 	for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
 		DrawEngineType *engine = link->data;
+		ViewportEngineData *data = DRW_viewport_engine_data_get(engine->idname);
 		if (engine->cache_populate) {
-			engine->cache_populate(ob);
+			engine->cache_populate(data, ob);
 		}
 	}
 }
@@ -1424,8 +1427,9 @@ static void DRW_engines_cache_finish(void)
 {
 	for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
 		DrawEngineType *engine = link->data;
+		ViewportEngineData *data = DRW_viewport_engine_data_get(engine->idname);
 		if (engine->cache_finish) {
-			engine->cache_finish();
+			engine->cache_finish(data);
 		}
 	}
 }
@@ -1434,8 +1438,9 @@ static void DRW_engines_draw_background(void)
 {
 	for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
 		DrawEngineType *engine = link->data;
+		ViewportEngineDat

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list