[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