[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28942] branches/soc-2010-moguri: Adding a nicer toggle between external files or Text datablocks for custom shaders .

Mitchell Stokes mogurijin at gmail.com
Mon May 24 02:33:21 CEST 2010


Revision: 28942
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28942
Author:   moguri
Date:     2010-05-24 02:33:17 +0200 (Mon, 24 May 2010)

Log Message:
-----------
Adding a nicer toggle between external files or Text datablocks for custom shaders. This will eventually be switched to a "source" enum. Also, I'll need to come up with some better error messages for when reading Text datablocks fail. And one last thing: I'm starting to put too much into Material, so I'll probably need to make a new struct soon for custom shader info.

Modified Paths:
--------------
    branches/soc-2010-moguri/release/scripts/ui/properties_material.py
    branches/soc-2010-moguri/source/blender/blenkernel/intern/material.c
    branches/soc-2010-moguri/source/blender/gpu/intern/gpu_material.c
    branches/soc-2010-moguri/source/blender/makesdna/DNA_material_types.h
    branches/soc-2010-moguri/source/blender/makesrna/intern/rna_material.c

Modified: branches/soc-2010-moguri/release/scripts/ui/properties_material.py
===================================================================
--- branches/soc-2010-moguri/release/scripts/ui/properties_material.py	2010-05-23 21:38:27 UTC (rev 28941)
+++ branches/soc-2010-moguri/release/scripts/ui/properties_material.py	2010-05-24 00:33:17 UTC (rev 28942)
@@ -789,15 +789,19 @@
         col = layout.column()
 		
         mat = active_node_mat(context.material)
-		
-        col.prop(mat, "vertex_text")
-        col.prop(mat, "geometry_text")
-        col.prop(mat, "fragment_text")
 
-        col.prop(mat, "vertex_shader")
-        col.prop(mat, "geometry_shader")
-        col.prop(mat, "fragment_shader")
+        col.prop(mat, "use_external_shaders")
 
+        if mat.use_external_shaders:
+            col.prop(mat, "vertex_shader")
+            col.prop(mat, "geometry_shader")
+            col.prop(mat, "fragment_shader")
+        else:
+            col.prop(mat, "vertex_text")
+            col.prop(mat, "geometry_text")
+            col.prop(mat, "fragment_text")
+
+
 class VolumeButtonsPanel(bpy.types.Panel):
     bl_space_type = 'PROPERTIES'
     bl_region_type = 'WINDOW'

Modified: branches/soc-2010-moguri/source/blender/blenkernel/intern/material.c
===================================================================
--- branches/soc-2010-moguri/source/blender/blenkernel/intern/material.c	2010-05-23 21:38:27 UTC (rev 28941)
+++ branches/soc-2010-moguri/source/blender/blenkernel/intern/material.c	2010-05-24 00:33:17 UTC (rev 28942)
@@ -191,6 +191,8 @@
 	ma->mode= MA_TRACEBLE|MA_SHADBUF|MA_SHADOW|MA_RAYBIAS|MA_TANGENT_STR|MA_ZTRANSP;
 	ma->shade_flag= MA_APPROX_OCCLUSION;
 	ma->preview = NULL;
+
+	ma->cs_flag= 0;
 }
 
 Material *add_material(char *name)

Modified: branches/soc-2010-moguri/source/blender/gpu/intern/gpu_material.c
===================================================================
--- branches/soc-2010-moguri/source/blender/gpu/intern/gpu_material.c	2010-05-23 21:38:27 UTC (rev 28941)
+++ branches/soc-2010-moguri/source/blender/gpu/intern/gpu_material.c	2010-05-24 00:33:17 UTC (rev 28942)
@@ -217,44 +217,62 @@
 		char *frag=NULL, *vert=NULL, *geom=NULL;
 
 		// Gather information on custom shaders
-		if (strcmp(material->ma->vertex_shader, ""))
+		if (material->ma->cs_flag & MA_CS_USE_EXTERNAL)
 		{
-			vert = gpu_load_shader(material->ma->vertex_shader);
+			// Load files
+			if (strcmp(material->ma->vertex_shader, ""))
+			{
+				vert = gpu_load_shader(material->ma->vertex_shader);
 
-			if (!vert)
-				printf("Error opening vertex shader\n");
+				if (!vert)
+					printf("Error opening vertex shader\n");
+			}
+
+			if (strcmp(material->ma->fragment_shader, ""))
+			{
+				frag = gpu_load_shader(material->ma->fragment_shader);
+
+				if (!frag)
+					printf("Error opening fragment shader\n");
+			}		
+				
+			if (strcmp(material->ma->geometry_shader, ""))
+			{
+				geom = gpu_load_shader(material->ma->geometry_shader);
+
+				if (!geom)
+					printf("Error opening geometry shader\n");
+			}
 		}
-		else if (material->ma->vert_text)
+		else
 		{
-			vert = txt_to_buf(material->ma->vert_text);
+			// Use Text datablocks
+			if (material->ma->vert_text)
+			{
+				vert = txt_to_buf(material->ma->vert_text);
 
-			if (!vert)
-				printf("Error?\n");
-		}
+				if (!vert)
+					printf("Error?\n");
+			}
 
+			if (material->ma->frag_text)
+			{
+				frag = txt_to_buf(material->ma->frag_text);
 
-		if (strcmp(material->ma->fragment_shader, ""))
-		{
-			frag = gpu_load_shader(material->ma->fragment_shader);
+				if (!frag)
+					printf("Error?\n");
+			}
 
-			if (!frag)
-				printf("Error opening fragment shader\n");
-		}
-		else if (material->ma->frag_text)
-		{
-			frag = txt_to_buf(material->ma->frag_text);
+			if (material->ma->geom_text)
+			{
+				geom = txt_to_buf(material->ma->geom_text);
 
-			if (!frag)
-				printf("Error?\n");
+				if (!geom)
+					printf("Error?\n");
+			}
 		}
 		
-		if (strcmp(material->ma->geometry_shader, ""))
-		{
-			geom = gpu_load_shader(material->ma->geometry_shader);
 
-			if (!geom)
-				printf("Error opening geometry shader\n");
-		}
 
 		outlink = material->outlink;
 		material->pass = GPU_generate_pass(&material->nodes, outlink,

Modified: branches/soc-2010-moguri/source/blender/makesdna/DNA_material_types.h
===================================================================
--- branches/soc-2010-moguri/source/blender/makesdna/DNA_material_types.h	2010-05-23 21:38:27 UTC (rev 28941)
+++ branches/soc-2010-moguri/source/blender/makesdna/DNA_material_types.h	2010-05-24 00:33:17 UTC (rev 28942)
@@ -166,6 +166,7 @@
 
 	int mapto_textured;	/* render-time cache to optimise texture lookups */
 	int pad4;
+	short cs_flag, cs_pad[3];
 
 	ListBase gpumaterial;		/* runtime */
 } Material;
@@ -193,7 +194,12 @@
 		 * otherwise anim-editors will not read correctly
 		 */
 #define MA_DS_SHOW_TEXS	4
+		 /* for custom shaders */
 
+/* cs_flag */
+		/* use external files instead of Text datablocks */
+#define MA_CS_USE_EXTERNAL 1
+
 /* mode (is int) */
 #define MA_TRACEBLE		1
 #define MA_SHADOW		2

Modified: branches/soc-2010-moguri/source/blender/makesrna/intern/rna_material.c
===================================================================
--- branches/soc-2010-moguri/source/blender/makesrna/intern/rna_material.c	2010-05-23 21:38:27 UTC (rev 28941)
+++ branches/soc-2010-moguri/source/blender/makesrna/intern/rna_material.c	2010-05-24 00:33:17 UTC (rev 28942)
@@ -1529,9 +1529,14 @@
 	RNA_def_property_ui_text(prop, "Fragment Shader", "A custom GLSL fragment shader in a text block");
 	RNA_def_property_update(prop, 0, "rna_Material_update");
 
+	prop= RNA_def_property(srna, "use_external_shaders", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "cs_flag", MA_CS_USE_EXTERNAL);
+	RNA_def_property_ui_text(prop, "Use External Shaders", "Use shaders from files instead of text datablocks.");
+	RNA_def_property_update(prop, 0, "rna_Material_update");
+
 	prop= RNA_def_property(srna, "fragment_shader", PROP_STRING, PROP_NONE);
 	RNA_def_property_string_sdna(prop, NULL, "fragment_shader");
-	RNA_def_property_ui_text(prop, "Fragement Shader", "A custom GLSL fragment shader to use");
+	RNA_def_property_ui_text(prop, "Fragment Shader", "A custom GLSL fragment shader to use");
 	RNA_def_property_update(prop, 0, "rna_Material_update");
 
 	prop= RNA_def_property(srna, "vertex_shader", PROP_STRING, PROP_NONE);





More information about the Bf-blender-cvs mailing list