[Bf-blender-cvs] [b86e5a9fbf] clay-engine: Fixed Pointer problem. Now materials are working.

Clément Foucault noreply at git.blender.org
Mon Jan 30 15:36:21 CET 2017


Commit: b86e5a9fbfc7b2b2bb1d80f800ac17f5c4fc1f8a
Author: Clément Foucault
Date:   Mon Jan 30 15:09:35 2017 +0100
Branches: clay-engine
https://developer.blender.org/rBb86e5a9fbfc7b2b2bb1d80f800ac17f5c4fc1f8a

Fixed Pointer problem. Now materials are working.

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

M	source/blender/draw/DRW_engine.h
M	source/blender/draw/engines/clay/clay.c
M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_manager.c
M	source/blender/makesrna/intern/rna_scene.c

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

diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h
index 93b5e69d4d..05222574ae 100644
--- a/source/blender/draw/DRW_engine.h
+++ b/source/blender/draw/DRW_engine.h
@@ -39,7 +39,7 @@ void DRW_engines_free(void);
 void DRW_pass_free(struct DRWPass *pass);
 
 /* Settings */
-void *DRW_material_settings_get(struct Material *ma, const char *engine_name, void **runtime);
-void *DRW_render_settings_get(struct Scene *scene, const char *engine_name, void **runtime);
+void *DRW_material_settings_get(struct Material *ma, const char *engine_name, void ***runtime);
+void *DRW_render_settings_get(struct Scene *scene, const char *engine_name, void ***runtime);
 
 #endif /* __DRW_ENGINE_H__ */
\ No newline at end of file
diff --git a/source/blender/draw/engines/clay/clay.c b/source/blender/draw/engines/clay/clay.c
index d084a3383b..a588412903 100644
--- a/source/blender/draw/engines/clay/clay.c
+++ b/source/blender/draw/engines/clay/clay.c
@@ -487,19 +487,19 @@ static void update_ubo_storage(MaterialRuntimeClay *runtime, unsigned int curren
 static void CLAY_update_material_ubo(const struct bContext *C)
 {
 	Main *bmain = CTX_data_main(C);
-	MaterialRuntimeClay *runtime;
+	MaterialRuntimeClay **runtime;
 
 	/* Update Default materials */
 	for (Scene *sce = bmain->scene.first; sce; sce = sce->id.next) {
 		/* Using render settings as material settings */
-		MaterialEngineSettingsClay *res = DRW_render_settings_get(sce, RE_engine_id_BLENDER_CLAY, (void **)&runtime);
-		CLAY_update_material_runtime(res, &runtime);
+		MaterialEngineSettingsClay *res = DRW_render_settings_get(sce, RE_engine_id_BLENDER_CLAY, (void ***)&runtime);
+		CLAY_update_material_runtime(res, runtime);
 	}
 
 	/* Update Scene Materials */
 	for (Material *mat = bmain->mat.first; mat; mat = mat->id.next) {
-		MaterialEngineSettingsClay *mesc = DRW_material_settings_get(mat, RE_engine_id_BLENDER_CLAY, (void **)&runtime);
-		CLAY_update_material_runtime(mesc, &runtime);
+		MaterialEngineSettingsClay *mesc = DRW_material_settings_get(mat, RE_engine_id_BLENDER_CLAY, (void ***)&runtime);
+		CLAY_update_material_runtime(mesc, runtime);
 	}
 
 	if (data.ubo_flag & CLAY_UBO_REFRESH) {
@@ -507,15 +507,15 @@ static void CLAY_update_material_ubo(const struct bContext *C)
 
 		/* Default materials */
 		for (Scene *sce = bmain->scene.first; sce; sce = sce->id.next) {
-			DRW_render_settings_get(sce, RE_engine_id_BLENDER_CLAY, (void **)&runtime);
-			update_ubo_storage(runtime, current_id);
+			DRW_render_settings_get(sce, RE_engine_id_BLENDER_CLAY, (void ***)&runtime);
+			update_ubo_storage(*runtime, current_id);
 			current_id++;
 		}
 
 		/* TODO only add materials linked to geometry */
 		for (Material *mat = bmain->mat.first; mat; mat = mat->id.next) {
-			DRW_material_settings_get(mat, RE_engine_id_BLENDER_CLAY, (void **)&runtime);
-			update_ubo_storage(runtime, current_id);
+			DRW_material_settings_get(mat, RE_engine_id_BLENDER_CLAY, (void ***)&runtime);
+			update_ubo_storage(*runtime, current_id);
 			current_id++;
 		}
 
@@ -540,12 +540,12 @@ static void CLAY_create_cache(CLAY_PassList *passes, const struct bContext *C)
 
 	/* Clay Pass */
 	{
-		MaterialRuntimeClay *runtime;
-		DRW_render_settings_get(NULL, RE_engine_id_BLENDER_CLAY, (void **)&runtime);
+		MaterialRuntimeClay **runtime;
+		DRW_render_settings_get(NULL, RE_engine_id_BLENDER_CLAY, (void ***)&runtime);
 
 		passes->clay_pass = DRW_pass_create("Clay Pass", DRW_STATE_WRITE_COLOR);
 
-		default_shgrp = CLAY_shgroup_create(passes->clay_pass, &runtime->material_id);
+		default_shgrp = CLAY_shgroup_create(passes->clay_pass, &(*runtime)->material_id);
 		DRW_shgroup_uniform_block(default_shgrp, "material_block", data.mat_ubo, 0);
 	}
 
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index a486c10fe5..6d26f7b8b7 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -200,8 +200,8 @@ bool DRW_viewport_cache_is_dirty(void);
 
 /* Settings */
 #ifndef __DRW_ENGINE_H__
-void *DRW_material_settings_get(Material *ma, const char *engine_name, void **runtime);
-void *DRW_render_settings_get(Scene *scene, const char *engine_name, void **runtime);
+void *DRW_material_settings_get(Material *ma, const char *engine_name, void ***runtime);
+void *DRW_render_settings_get(Scene *scene, const char *engine_name, void ***runtime);
 #endif /* __DRW_ENGINE_H__ */
 
 /* Draw commands */
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 683c0bd178..45c8b911df 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -849,7 +849,7 @@ void DRW_state_reset(void)
 
 /* ****************************************** Settings ******************************************/
 
-void *DRW_material_settings_get(Material *ma, const char *engine_name, void **runtime)
+void *DRW_material_settings_get(Material *ma, const char *engine_name, void ***runtime)
 {
 	MaterialEngineSettings *ms = NULL;
 
@@ -881,7 +881,7 @@ void *DRW_material_settings_get(Material *ma, const char *engine_name, void **ru
 }
 
 /* If scene is NULL, use context scene */
-void *DRW_render_settings_get(Scene *scene, const char *engine_name, void **runtime)
+void *DRW_render_settings_get(Scene *scene, const char *engine_name, void ***runtime)
 {
 	RenderEngineSettings *rs = NULL;
 
@@ -905,8 +905,6 @@ void *DRW_render_settings_get(Scene *scene, const char *engine_name, void **runt
 			BLI_assert(false);
 		}
 
-		printf("DRW_render_settings_get %s\n", rs->name);
-
 		BLI_addtail(&scene->engines_settings, rs);
 	}
 
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 604a758980..b18fd6dcbb 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -1901,13 +1901,13 @@ static PointerRNA rna_RenderEngineSettings_active_get(PointerRNA *ptr)
 static void rna_RenderEngineSettings_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
 {
 	Scene *sce = (Scene *)ptr->id.data;
-	void *runtime;
+	void **runtime;
 
-	DRW_render_settings_get(sce, sce->r.engine, &runtime);
+	DRW_render_settings_get(sce, sce->r.engine, (void ***)&runtime);
 
-	if (runtime) {
-		MEM_freeN(runtime);
-		runtime = NULL;
+	if (*runtime) {
+		MEM_freeN(*runtime);
+		*runtime = NULL;
 	}
 
 	WM_main_add_notifier(NC_SPACE | ND_SPACE_VIEW3D, NULL);




More information about the Bf-blender-cvs mailing list