[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49100] branches/ge_harmony: Getting a start on a new UI for Post-process 2D filters.
Daniel Stokes
kupomail at gmail.com
Sat Jul 21 10:17:43 CEST 2012
Revision: 49100
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49100
Author: kupoman
Date: 2012-07-21 08:17:42 +0000 (Sat, 21 Jul 2012)
Log Message:
-----------
Getting a start on a new UI for Post-process 2D filters.
Modified Paths:
--------------
branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py
branches/ge_harmony/source/blender/blenkernel/intern/scene.c
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/makesdna/DNA_scene_types.h
branches/ge_harmony/source/blender/makesdna/DNA_shader_types.h
branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c
branches/ge_harmony/source/blender/makesrna/intern/rna_shader.c
Modified: branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py
===================================================================
--- branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py 2012-07-21 08:15:54 UTC (rev 49099)
+++ branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py 2012-07-21 08:17:42 UTC (rev 49100)
@@ -359,7 +359,45 @@
layout.prop(gs, "dome_text")
+class RENDER_PT_game_post_filters(RenderButtonsPanel, Panel):
+ bl_label = "Post-Process Filters"
+ COMPAT_ENGINES = {'BLENDER_GAME'}
+
+ def draw(self, context):
+ layout = self.layout
+
+ gs = context.scene.game_settings
+
+ row = layout.row()
+ 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")
+
+ filter = gs.active_post_filter
+ if filter:
+ col.label("Source:")
+ row = col.row()
+ row.prop(filter, "shader_location", expand=True)
+ if filter.shader_location == "INTERNAL":
+ col.prop(filter, "source_text", text="")
+ elif filter.shader_location == "EXTERNAL":
+ col.prop(filter, "source_path", text="")
+
+ if filter.uniforms:
+ col.label("Uniforms:")
+
+ for uniform in filter.uniforms:
+ if hasattr(uniform, "value"):
+ if uniform.type in ("VEC2", "VEC3", "VEC4", "IVEC2", "IVEC3", "IVEC4"):
+ col.label(uniform.name + ":")
+ row = col.row()
+ row.prop(uniform, "value", text="")
+ else:
+ row = col.row()
+ row.label(uniform.name + ":")
+ row.prop(uniform, "value", text="")
+
class RENDER_PT_game_shading(RenderButtonsPanel, Panel):
bl_label = "Shading"
COMPAT_ENGINES = {'BLENDER_GAME'}
Modified: branches/ge_harmony/source/blender/blenkernel/intern/scene.c
===================================================================
--- branches/ge_harmony/source/blender/blenkernel/intern/scene.c 2012-07-21 08:15:54 UTC (rev 49099)
+++ branches/ge_harmony/source/blender/blenkernel/intern/scene.c 2012-07-21 08:17:42 UTC (rev 49100)
@@ -543,6 +543,9 @@
sce->gm.exitkey = 218; // Blender key code for ESC
+ sce->gm.postfilters.first = sce->gm.postfilters.last = NULL;
+ sce->gm.actpostfilter = 0;
+
sound_create_scene(sce);
return sce;
Modified: branches/ge_harmony/source/blender/editors/render/render_intern.h
===================================================================
--- branches/ge_harmony/source/blender/editors/render/render_intern.h 2012-07-21 08:15:54 UTC (rev 49099)
+++ branches/ge_harmony/source/blender/editors/render/render_intern.h 2012-07-21 08:17:42 UTC (rev 49100)
@@ -46,6 +46,7 @@
void MATERIAL_OT_new(struct wmOperatorType *ot);
void SHADER_OT_new(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);
Modified: branches/ge_harmony/source/blender/editors/render/render_ops.c
===================================================================
--- branches/ge_harmony/source/blender/editors/render/render_ops.c 2012-07-21 08:15:54 UTC (rev 49099)
+++ branches/ge_harmony/source/blender/editors/render/render_ops.c 2012-07-21 08:17:42 UTC (rev 49100)
@@ -54,6 +54,7 @@
WM_operatortype_append(MATERIAL_OT_new);
WM_operatortype_append(SHADER_OT_new);
+ WM_operatortype_append(SHADER_OT_new_postfilter);
WM_operatortype_append(TEXTURE_OT_new);
WM_operatortype_append(WORLD_OT_new);
Modified: branches/ge_harmony/source/blender/editors/render/render_shading.c
===================================================================
--- branches/ge_harmony/source/blender/editors/render/render_shading.c 2012-07-21 08:15:54 UTC (rev 49099)
+++ branches/ge_harmony/source/blender/editors/render/render_shading.c 2012-07-21 08:17:42 UTC (rev 49100)
@@ -465,6 +465,55 @@
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
+/********************** new filter operator *********************/
+
+static int new_shader_postfilter_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 material */
+ if (sh)
+ sh = BKE_shader_copy(sh);
+ else
+ sh = BKE_shader_add("Post-Process");
+
+ sh->type = SHADER_TYPE_POSTPROCESS;
+
+ /* 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.actpostfilter = BLI_countlist(&scene->gm.postfilters) - 1;
+
+ return OPERATOR_FINISHED;
+}
+
+void SHADER_OT_new_postfilter(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "New Post-Process Filter";
+ ot->idname = "SHADER_OT_new_postfilter";
+ ot->description = "Add a new Post-Process 2D Filter";
+
+ /* api callbacks */
+ ot->exec = new_shader_postfilter_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
/********************** new texture operator *********************/
static int new_texture_exec(bContext *C, wmOperator *UNUSED(op))
Modified: branches/ge_harmony/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/ge_harmony/source/blender/makesdna/DNA_scene_types.h 2012-07-21 08:15:54 UTC (rev 49099)
+++ branches/ge_harmony/source/blender/makesdna/DNA_scene_types.h 2012-07-21 08:17:42 UTC (rev 49100)
@@ -625,7 +625,10 @@
short ticrate, maxlogicstep, physubstep, maxphystep;
short obstacleSimulation, pad1;
float levelHeight;
- float deactivationtime, lineardeactthreshold, angulardeactthreshold,pad2;
+ float deactivationtime, lineardeactthreshold, angulardeactthreshold;
+
+ int actpostfilter;
+ ListBase postfilters;
} GameData;
#define STEREO_NOSTEREO 1
Modified: branches/ge_harmony/source/blender/makesdna/DNA_shader_types.h
===================================================================
--- branches/ge_harmony/source/blender/makesdna/DNA_shader_types.h 2012-07-21 08:15:54 UTC (rev 49099)
+++ branches/ge_harmony/source/blender/makesdna/DNA_shader_types.h 2012-07-21 08:17:42 UTC (rev 49100)
@@ -61,6 +61,11 @@
GHash *uniform_cache;
} Shader;
+typedef struct ShaderLink {
+ struct ShaderLink *next, *prev;
+ struct Shader *shader;
+} ShaderLink;
+
/* type */
#define SHADER_TYPE_VERTEX 0
#define SHADER_TYPE_FRAGMENT 1
Modified: branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c 2012-07-21 08:15:54 UTC (rev 49099)
+++ branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c 2012-07-21 08:17:42 UTC (rev 49100)
@@ -1321,6 +1321,57 @@
gm->exitkey = value;
}
+static PointerRNA rna_GameSettings_active_postfilter_get(PointerRNA *ptr)
+{
+ GameData *gm = (GameData *)ptr->data;
+ ShaderLink *link = BLI_findlink(&gm->postfilters, (int)gm->actpostfilter);
+ Shader *shader = (link) ? link->shader : NULL;
+ return rna_pointer_inherit_refine(ptr, &RNA_Shader, shader);
+}
+
+static void rna_GameSettings_active_postfilter_set(PointerRNA *ptr, PointerRNA value)
+{
+ GameData *gm = (GameData *)ptr->data;
+ Shader *sh = (Shader*)value.data;
+
+ ShaderLink *link = BLI_findlink(&gm->postfilters, (int)gm->actpostfilter);
+ if (!link)
+ {
+ link = MEM_callocN(sizeof(ShaderLink), "New Post Process Filter");
+ link->shader = sh;
+ BLI_addtail(&gm->postfilters, sh);
+ }
+ else
+ {
+ if (link->shader)
+ link->shader->id.us--;
+ link->shader = sh;
+ }
+
+ id_us_plus((ID *) sh);
+}
+
+static int rna_GameSettings_active_postfilter_index_get(PointerRNA *ptr)
+{
+ GameData *gm = (GameData*)ptr->data;
+ return MAX2(gm->actpostfilter-1, 0);
+}
+
+static void rna_GameSettings_active_postfilter_index_set(PointerRNA *ptr, int value)
+{
+ GameData *gm = (GameData*)ptr->data;
+ gm->actpostfilter = value+1;
+}
+
+static void rna_GameSettings_active_postfilter_index_range(PointerRNA *ptr, int *min, int *max)
+{
+ GameData *gm = (GameData*)ptr->data;
+
+ *min = 0;
+ *max = BLI_countlist(&gm->postfilters)-1;
+ *max = MAX2(0, *max);
+}
+
static TimeMarker *rna_TimeLine_add(Scene *scene, const char name[])
{
TimeMarker *marker = MEM_callocN(sizeof(TimeMarker), "TimeMarker");
@@ -2736,7 +2787,25 @@
prop = RNA_def_property(srna, "show_obstacle_simulation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GAME_SHOW_OBSTACLE_SIMULATION);
RNA_def_property_ui_text(prop, "Visualization", "Enable debug visualization for obstacle simulation");
+
+ /* Filter Settings */
+ prop = RNA_def_property(srna, "post_filters", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "postfilters", NULL);
+ RNA_def_property_collection_funcs(prop, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+ RNA_def_property_struct_type(prop, "ShaderLink");
+ RNA_def_property_ui_text(prop, "Post Process Filters", "2D filters run after the scene is rendered");
+ prop = RNA_def_property(srna, "active_post_filter", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "Shader");
+ RNA_def_property_pointer_funcs(prop, "rna_GameSettings_active_postfilter_get", "rna_GameSettings_active_postfilter_set", NULL, NULL);
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Active Shader", "");
+
+ prop = RNA_def_property(srna, "active_post_filter_index", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "actpostfilter");
+ RNA_def_property_int_funcs(prop, NULL, NULL, "rna_GameSettings_active_postfilter_index_range");
+ RNA_def_property_ui_text(prop, "Active Post Filter Index", "");
+
/* Recast Settings */
prop = RNA_def_property(srna, "recast_data", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list