[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50335] branches/ge_harmony: Some UI clean up:

Daniel Stokes kupomail at gmail.com
Mon Sep 3 10:44:21 CEST 2012


Revision: 50335
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50335
Author:   kupoman
Date:     2012-09-03 08:44:20 +0000 (Mon, 03 Sep 2012)
Log Message:
-----------
Some UI clean up:
  * A newly created global shader is now automatically selected
  * Each custom shader UI (material, global, 2D filters) now filters the shader datablocks to only show relevant ones
  * Global shader and 2D filter UI now have the option to add and remove slots (global shaders don't work well with multiple slots yet)

Also fixing a potential crash caused by removing global shaders on BGE exit.

Modified Paths:
--------------
    branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py
    branches/ge_harmony/source/blender/editors/render/render_intern.h
    branches/ge_harmony/source/blender/editors/render/render_ops.c
    branches/ge_harmony/source/blender/editors/render/render_shading.c
    branches/ge_harmony/source/blender/makesrna/RNA_shader_utils.h
    branches/ge_harmony/source/blender/makesrna/intern/rna_material.c
    branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c
    branches/ge_harmony/source/blender/makesrna/intern/rna_shader.c
    branches/ge_harmony/source/gameengine/Ketsji/BL_BlenderShader.cpp

Modified: branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py
===================================================================
--- branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py	2012-09-03 07:37:38 UTC (rev 50334)
+++ branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py	2012-09-03 08:44:20 UTC (rev 50335)
@@ -405,7 +405,10 @@
         row = layout.row()
         col = row.column()
         col.template_list(gs, "global_shaders", gs, "active_global_shader_index", rows=2)
-        col.template_ID(gs, "active_global_shader", new="shader.new_postfilter")
+        col.template_ID(gs, "active_global_shader", new="shader.new_global")
+        col = row.column(align=True)
+        col.operator("scene.gshader_add", icon='ZOOMIN', text="")
+        col.operator("scene.gshader_remove", icon='ZOOMOUT', text="").index = gs.active_global_shader_index
             
         shader = gs.active_global_shader
         if shader:
@@ -424,6 +427,9 @@
         col = row.column()
         col.template_list(gs, "post_filters", gs, "active_post_filter_index", rows=2)
         col.template_ID(gs, "active_post_filter", new="shader.new_postfilter")
+        col = row.column(align=True)
+        col.operator("scene.postfilter_add", icon='ZOOMIN', text="")
+        col.operator("scene.postfilter_remove", icon='ZOOMOUT', text="").index = gs.active_post_filter_index
             
         filter = gs.active_post_filter
         if filter:

Modified: branches/ge_harmony/source/blender/editors/render/render_intern.h
===================================================================
--- branches/ge_harmony/source/blender/editors/render/render_intern.h	2012-09-03 07:37:38 UTC (rev 50334)
+++ branches/ge_harmony/source/blender/editors/render/render_intern.h	2012-09-03 08:44:20 UTC (rev 50335)
@@ -46,14 +46,21 @@
 
 void MATERIAL_OT_new(struct wmOperatorType *ot);
 void SHADER_OT_new(struct wmOperatorType *ot);
+void SHADER_OT_new_global(struct wmOperatorType *ot);
 void SHADER_OT_new_postfilter(struct wmOperatorType *ot);
 void TEXTURE_OT_new(struct wmOperatorType *ot);
 void WORLD_OT_new(struct wmOperatorType *ot);
 
+
+void MATERIAL_OT_shader_add(struct wmOperatorType *ot);
+void MATERIAL_OT_shader_remove(struct wmOperatorType *ot);
+void SCENE_OT_gshader_add(struct wmOperatorType *ot);
+void SCENE_OT_gshader_remove(struct wmOperatorType *ot);
+void SCENE_OT_postfilter_add(struct wmOperatorType *ot);
+void SCENE_OT_postfilter_remove(struct wmOperatorType *ot);
+
 void MATERIAL_OT_copy(struct wmOperatorType *ot);
 void MATERIAL_OT_paste(struct wmOperatorType *ot);
-void MATERIAL_OT_shader_add(struct wmOperatorType *ot);
-void MATERIAL_OT_shader_remove(struct wmOperatorType *ot);
 void MATERIAL_OT_force_update(struct wmOperatorType *ot);
 
 void SCENE_OT_render_layer_add(struct wmOperatorType *ot);

Modified: branches/ge_harmony/source/blender/editors/render/render_ops.c
===================================================================
--- branches/ge_harmony/source/blender/editors/render/render_ops.c	2012-09-03 07:37:38 UTC (rev 50334)
+++ branches/ge_harmony/source/blender/editors/render/render_ops.c	2012-09-03 08:44:20 UTC (rev 50335)
@@ -54,14 +54,20 @@
 
 	WM_operatortype_append(MATERIAL_OT_new);
 	WM_operatortype_append(SHADER_OT_new);
+	WM_operatortype_append(SHADER_OT_new_global);
 	WM_operatortype_append(SHADER_OT_new_postfilter);
 	WM_operatortype_append(TEXTURE_OT_new);
 	WM_operatortype_append(WORLD_OT_new);
 	
+	WM_operatortype_append(MATERIAL_OT_shader_add);
+	WM_operatortype_append(MATERIAL_OT_shader_remove);
+	WM_operatortype_append(SCENE_OT_gshader_add);
+	WM_operatortype_append(SCENE_OT_gshader_remove);
+	WM_operatortype_append(SCENE_OT_postfilter_add);
+	WM_operatortype_append(SCENE_OT_postfilter_remove);
+	
 	WM_operatortype_append(MATERIAL_OT_copy);
 	WM_operatortype_append(MATERIAL_OT_paste);
-	WM_operatortype_append(MATERIAL_OT_shader_add);
-	WM_operatortype_append(MATERIAL_OT_shader_remove);
 	WM_operatortype_append(MATERIAL_OT_force_update);
 
 	WM_operatortype_append(SCENE_OT_render_layer_add);

Modified: branches/ge_harmony/source/blender/editors/render/render_shading.c
===================================================================
--- branches/ge_harmony/source/blender/editors/render/render_shading.c	2012-09-03 07:37:38 UTC (rev 50334)
+++ branches/ge_harmony/source/blender/editors/render/render_shading.c	2012-09-03 08:44:20 UTC (rev 50335)
@@ -476,7 +476,7 @@
 	PointerRNA ptr, idptr;
 	PropertyRNA *prop;
 
-	/* add or copy material */
+	/* add or copy filter */
 	if (sh)
 		sh = BKE_shader_copy(sh);
 	else
@@ -516,6 +516,55 @@
 	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 }
 
+/********************** new global shader operator *********************/
+
+static int new_shader_global_exec(bContext *C, wmOperator *UNUSED(op))
+{
+	Scene *scene = CTX_data_scene(C);
+	Shader *sh = CTX_data_pointer_get_type(C, "shader", &RNA_Shader).data;
+	PointerRNA ptr, idptr;
+	PropertyRNA *prop;
+
+	/* add or copy filter */
+	if (sh)
+		sh = BKE_shader_copy(sh);
+	else
+		sh = BKE_shader_add("Global");
+
+	sh->use = SHADER_USE_GLOBAL;
+
+	/* hook into UI */
+	uiIDContextProperty(C, &ptr, &prop);
+
+	if (prop) {
+		/* when creating new ID blocks, use is already 1, but RNA
+		 * pointer set also increases user, so this compensates it */
+		sh->id.us--;
+
+		RNA_id_pointer_create(&sh->id, &idptr);
+		RNA_property_pointer_set(&ptr, prop, idptr);
+		RNA_property_update(C, &ptr, prop);
+	}
+
+	scene->gm.actgshader = BLI_countlist(&scene->gm.gshaders);
+
+	return OPERATOR_FINISHED;
+}
+
+void SHADER_OT_new_global(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name = "New Global Sahder";
+	ot->idname = "SHADER_OT_new_global";
+	ot->description = "Add a new shader that affects all objects in the scene";
+	
+	/* api callbacks */
+	ot->exec = new_shader_global_exec;
+
+	/* flags */
+	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
 /********************** new texture operator *********************/
 
 static int new_texture_exec(bContext *C, wmOperator *UNUSED(op))
@@ -923,126 +972,217 @@
 	/* flags */
 	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 }
+/********************** shader operators *********************/
+static int shader_add(ListBase *list, int *index, const char *malloc_str)
+{
+	LinkData *link = MEM_callocN(sizeof(LinkData), malloc_str);
+	BLI_addtail(list, link);
+	*index = BLI_countlist(list);
+	
+	return OPERATOR_FINISHED;
+}
 
-/********************** material operators *********************/
-
-/* material copy/paste */
-static int copy_material_exec(bContext *C, wmOperator *UNUSED(op))
+static int shader_remove(wmOperator *op, ListBase *list, int *index)
 {
-	Material *ma = CTX_data_pointer_get_type(C, "material", &RNA_Material).data;
+	LinkData *link;
+	int i = RNA_int_get(op->ptr, "index");
 
-	if (ma == NULL)
+	link = BLI_findlink(list, i);
+
+	if(link) {
+		BLI_remlink(list, link);
+
+		if (i != 1 || BLI_countlist(list) == 1)
+			(*index)--;
+		return OPERATOR_FINISHED;
+	}
+	else {
 		return OPERATOR_CANCELLED;
+	}
+}
 
-	copy_matcopybuf(ma);
+static int shader_add_exec(bContext *C, wmOperator *UNUSED(op))
+{
+	Material *ma= CTX_data_pointer_get_type(C, "material", &RNA_Material).data;
+	return shader_add(&ma->custom_shaders, &ma->actshader, "New Custom Shader");
+}
 
-	return OPERATOR_FINISHED;
+void MATERIAL_OT_shader_add(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Add Shader";
+	ot->idname= "MATERIAL_OT_shader_add";
+	ot->description= "Add a new custom shader";
+
+	/* api callbacks */
+	ot->exec= shader_add_exec;
+
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 }
 
-void MATERIAL_OT_copy(wmOperatorType *ot)
+static int shader_remove_exec(bContext *C, wmOperator *op)
 {
+	Material *ma= CTX_data_pointer_get_type(C, "material", &RNA_Material).data;
+	return shader_remove(op, &ma->custom_shaders, &ma->actshader);
+}
+
+void MATERIAL_OT_shader_remove(wmOperatorType *ot)
+{
 	/* identifiers */
-	ot->name = "Copy Material";
-	ot->idname = "MATERIAL_OT_copy";
-	ot->description = "Copy the material settings and nodes";
+	ot->name= "Remove Shader";
+	ot->idname= "MATERIAL_OT_shader_remove";
+	ot->description = "Remove a custom shader";
 
 	/* api callbacks */
-	ot->exec = copy_material_exec;
+	ot->exec= shader_remove_exec;
 
 	/* flags */
-	ot->flag = OPTYPE_REGISTER; /* no undo needed since no changes are made to the material */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+	RNA_def_int(ot->srna, "index", 0, 0, INT_MAX, "Index", "Shader index to remove ", 0, INT_MAX);
 }
 
-static int paste_material_exec(bContext *C, wmOperator *UNUSED(op))
+static int gshader_add_exec(bContext *C, wmOperator *UNUSED(op))
 {
-	Material *ma = CTX_data_pointer_get_type(C, "material", &RNA_Material).data;
+	Scene *scene = CTX_data_scene(C);
+	return shader_add(&scene->gm.gshaders, &scene->gm.actgshader, "Global Shader Slot");
+}
 
-	if (ma == NULL)
-		return OPERATOR_CANCELLED;
+void SCENE_OT_gshader_add(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Add Global Shader";
+	ot->idname= "SCENE_OT_gshader_add";
+	ot->description= "Add a new global shader slot";
 
-	paste_matcopybuf(ma);
+	/* api callbacks */
+	ot->exec= gshader_add_exec;
 
-	WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING_DRAW, ma);
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
 
-	return OPERATOR_FINISHED;
+static int gshader_remove_exec(bContext *C, wmOperator *op)
+{
+	Scene *scene = CTX_data_scene(C);
+	return shader_remove(op, &scene->gm.gshaders, &scene->gm.actgshader);
 }
 
-void MATERIAL_OT_paste(wmOperatorType *ot)
+void SCENE_OT_gshader_remove(wmOperatorType *ot)
 {
 	/* identifiers */
-	ot->name = "Paste Material";
-	ot->idname = "MATERIAL_OT_paste";
-	ot->description = "Paste the material settings and nodes";
+	ot->name= "Remove Global Shader";
+	ot->idname= "SCENE_OT_gshader_remove";
+	ot->description = "Remove a global shader slot";
 
 	/* api callbacks */
-	ot->exec = paste_material_exec;
+	ot->exec= gshader_remove_exec;
 
 	/* flags */
-	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+	RNA_def_int(ot->srna, "index", 0, 0, INT_MAX, "Index", "Shader index to remove ", 0, INT_MAX);
 }
 
-static int shader_add_exec(bContext *C, wmOperator *UNUSED(op))
+static int postfilter_add_exec(bContext *C, wmOperator *UNUSED(op))
 {
-	Material *ma= CTX_data_pointer_get_type(C, "material", &RNA_Material).data;

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list