[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49597] branches/ge_harmony: Adding the UI for pre-process filters and cleaning up some duplicate code.

Daniel Stokes kupomail at gmail.com
Mon Aug 6 10:02:08 CEST 2012


Revision: 49597
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49597
Author:   kupoman
Date:     2012-08-06 08:02:08 +0000 (Mon, 06 Aug 2012)
Log Message:
-----------
Adding the UI for pre-process filters and cleaning up some duplicate code. The pre-process filters are not functional yet.

Modified Paths:
--------------
    branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py
    branches/ge_harmony/source/blender/makesdna/DNA_scene_types.h
    branches/ge_harmony/source/blender/makesrna/intern/CMakeLists.txt
    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

Added Paths:
-----------
    branches/ge_harmony/source/blender/makesrna/RNA_shader_utils.h

Modified: branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py
===================================================================
--- branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py	2012-08-06 08:01:20 UTC (rev 49596)
+++ branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py	2012-08-06 08:02:08 UTC (rev 49597)
@@ -358,7 +358,59 @@
                 col = split.column()
 
             layout.prop(gs, "dome_text")
+            
+def display_filter_settings(filter, layout):
+    col = layout.column()
+    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:
+        col = layout.column()
+        if hasattr(uniform, "value"):
+            reserved = uniform.name.startswith("bgl_")
+            if uniform.type in ("VEC2", "VEC3", "VEC4", "IVEC2", "IVEC3", "IVEC4"):
+                if not reserved:
+                    col.label(uniform.name + ":")
+                    row = col.row()
+                    row.prop(uniform, "value", text="")
+                else:
+                    col.label(uniform.name)
+            else:
+                row = col.row()
+                if not reserved:
+                    row.label(uniform.name + ":")
+                    row.prop(uniform, "value", text="")
+                else:
+                    row.label(uniform.name)
+                
+            col.active = not reserved
 
+class RENDER_PT_game_pre_filters(RenderButtonsPanel, Panel):
+    bl_label = "Pre-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, "pre_filters", gs, "active_pre_filter_index", rows=2)
+        col.template_ID(gs, "active_pre_filter", new="shader.new_postfilter")
+            
+        filter = gs.active_post_filter
+        if filter:
+            display_filter_settings(filter, layout)
+            
 class RENDER_PT_game_post_filters(RenderButtonsPanel, Panel):
     bl_label = "Post-Process Filters"
     COMPAT_ENGINES = {'BLENDER_GAME'}
@@ -375,37 +427,7 @@
             
         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:
-                col = layout.column()
-                if hasattr(uniform, "value"):
-                    reserved = uniform.name.startswith("bgl_")
-                    if uniform.type in ("VEC2", "VEC3", "VEC4", "IVEC2", "IVEC3", "IVEC4"):
-                        if not reserved:
-                            col.label(uniform.name + ":")
-                            row = col.row()
-                            row.prop(uniform, "value", text="")
-                        else:
-                            col.label(uniform.name)
-                    else:
-                        row = col.row()
-                        if not reserved:
-                            row.label(uniform.name + ":")
-                            row.prop(uniform, "value", text="")
-                        else:
-                            row.label(uniform.name)
-                        
-                    col.active = not reserved
+            display_filter_settings(filter, layout)
 
 
 class RENDER_PT_game_shading(RenderButtonsPanel, Panel):

Modified: branches/ge_harmony/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/ge_harmony/source/blender/makesdna/DNA_scene_types.h	2012-08-06 08:01:20 UTC (rev 49596)
+++ branches/ge_harmony/source/blender/makesdna/DNA_scene_types.h	2012-08-06 08:02:08 UTC (rev 49597)
@@ -629,6 +629,8 @@
 
 	int actpostfilter;
 	ListBase postfilters;
+	int actprefilter, filterpad;
+	ListBase prefilters;
 } GameData;
 
 #define STEREO_NOSTEREO		1

Added: branches/ge_harmony/source/blender/makesrna/RNA_shader_utils.h
===================================================================
--- branches/ge_harmony/source/blender/makesrna/RNA_shader_utils.h	                        (rev 0)
+++ branches/ge_harmony/source/blender/makesrna/RNA_shader_utils.h	2012-08-06 08:02:08 UTC (rev 49597)
@@ -0,0 +1,48 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Foundation (2008).
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __RNA_SHADER_UTILS_H__
+#define __RNA_SHADER_UTILS_H__
+
+/** \file RNA_shader_utils.h
+ *  \ingroup RNA
+ *  Utility functions for creating shader related functions. */
+
+#include "DNA_listBase.h"
+#include "RNA_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+PointerRNA rna_Shader_active_get(PointerRNA *ptr, ListBase *list, int index);
+void rna_Shader_active_set(PointerRNA value, ListBase *list, int index);
+int rna_Shader_active_index_get(int index);
+void rna_Shader_active_index_set(int value, int *index);
+void rna_Shader_active_index_range(int *min, int *max, ListBase *list);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __RNA_SHADER_UTILS_H__ */
+

Modified: branches/ge_harmony/source/blender/makesrna/intern/CMakeLists.txt
===================================================================
--- branches/ge_harmony/source/blender/makesrna/intern/CMakeLists.txt	2012-08-06 08:01:20 UTC (rev 49596)
+++ branches/ge_harmony/source/blender/makesrna/intern/CMakeLists.txt	2012-08-06 08:02:08 UTC (rev 49597)
@@ -124,6 +124,7 @@
 	../RNA_define.h
 	../RNA_documentation.h
 	../RNA_enum_types.h
+    ../RNA_shader_utils.h
 	../RNA_types.h
 )
 

Modified: branches/ge_harmony/source/blender/makesrna/intern/rna_material.c
===================================================================
--- branches/ge_harmony/source/blender/makesrna/intern/rna_material.c	2012-08-06 08:01:20 UTC (rev 49596)
+++ branches/ge_harmony/source/blender/makesrna/intern/rna_material.c	2012-08-06 08:02:08 UTC (rev 49597)
@@ -83,6 +83,8 @@
 
 #include "DNA_node_types.h"
 
+#include "RNA_shader_utils.h"
+
 #include "BKE_depsgraph.h"
 #include "BKE_main.h"
 #include "BKE_material.h"
@@ -200,52 +202,31 @@
 static PointerRNA rna_Material_active_shader_get(PointerRNA *ptr)
 {
 	Material *ma = (Material*)ptr->data;
-	CustomShader *cs = BLI_findlink(&ma->custom_shaders, (int)ma->actshader-1);
-	Shader *shad = (cs) ? cs->shader : NULL;
-	return rna_pointer_inherit_refine(ptr, &RNA_Shader, shad);
+	return rna_Shader_active_get(ptr, &ma->custom_shaders, ma->actshader);
 }
 
 static void rna_Material_active_shader_set(PointerRNA *ptr, PointerRNA value)
 {
 	Material *ma = (Material*)ptr->data;
-	Shader *sh = (Shader*)value.data;
-
-	CustomShader *link = BLI_findlink(&ma->custom_shaders, (int)ma->actshader-1);
-	if (!link)
-	{
-		CustomShader *cs = MEM_callocN(sizeof(CustomShader), "New Custom Shader");
-		cs->shader = sh;
-		BLI_addtail(&ma->custom_shaders, cs);
-	}
-	else
-	{
-		if (link->shader)
-			link->shader->id.us--;
-		link->shader = sh;
-	}
-
-	id_us_plus((ID *) sh);
+	rna_Shader_active_set(value, &ma->custom_shaders, ma->actshader);
 }
 
 static int rna_Material_active_shader_index_get(PointerRNA *ptr)
 {
 	Material *ma = (Material*)ptr->data;
-	return MAX2(ma->actshader-1, 0);
+	return rna_Shader_active_index_get(ma->actshader);
 }
 
 static void rna_Material_active_shader_index_set(PointerRNA *ptr, int value)
 {
 	Material *ma = (Material*)ptr->data;
-	ma->actshader = value+1;
+	rna_Shader_active_index_set(value, &ma->actshader);
 }
 
 static void rna_Material_active_shader_index_range(PointerRNA *ptr, int *min, int *max)
 {
 	Material *ma = (Material*)ptr->data;
-
-	*min = 0;
-	*max = BLI_countlist(&ma->custom_shaders)-1;
-	*max = MAX2(0, *max);
+	rna_Shader_active_index_range(min, max, &ma->custom_shaders);
 }
 
 static void rna_CustomShader_name_get(struct PointerRNA *ptr, char *str)

Modified: branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c	2012-08-06 08:01:20 UTC (rev 49596)
+++ branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c	2012-08-06 08:02:08 UTC (rev 49597)
@@ -290,6 +290,7 @@
 #include "DNA_mesh_types.h"
 
 #include "RNA_access.h"
+#include "RNA_shader_utils.h"
 
 #include "MEM_guardedalloc.h"
 
@@ -1341,52 +1342,61 @@
 static PointerRNA rna_GameSettings_active_postfilter_get(PointerRNA *ptr)
 {
 	GameData *gm = (GameData *)ptr->data;
-	ShaderLink *link = BLI_findlink(&gm->postfilters, (int)gm->actpostfilter-1);
-	Shader *shader = (link) ? link->shader : NULL;
-	return rna_pointer_inherit_refine(ptr, &RNA_Shader, shader);
+	return rna_Shader_active_get(ptr, &gm->postfilters, gm->actpostfilter);
 }
 
+static PointerRNA rna_GameSettings_active_prefilter_get(PointerRNA *ptr)
+{
+	GameData *gm = (GameData *)ptr->data;
+	return rna_Shader_active_get(ptr, &gm->prefilters, gm->actprefilter);
+}
+
 static void rna_GameSettings_active_postfilter_set(PointerRNA *ptr, PointerRNA value)
 {

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list