[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