Revision: 29230
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29230
Author:   moguri
Date:     2010-06-05 02:17:51 +0200 (Sat, 05 Jun 2010)

Log Message:
-----------
Working on storing data for custom uniforms. So far int, float and uint are 
working.

Modified Paths:
--------------
    branches/soc-2010-moguri/release/scripts/ui/properties_material.py
    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-06-04 23:38:59 UTC (rev 29229)
+++ branches/soc-2010-moguri/release/scripts/ui/properties_material.py  
2010-06-05 00:17:51 UTC (rev 29230)
@@ -817,6 +817,10 @@
             #layout.label(text="")
             row.prop(lay, "name")
             row.prop(lay, "type", text="")
+            if hasattr(lay, "value"):
+                row = layout.row()
+                row.prop(lay, "value")
+                row.prop(lay, "size")
 
 class VolumeButtonsPanel(bpy.types.Panel):
     bl_space_type = 'PROPERTIES'

Modified: branches/soc-2010-moguri/source/blender/makesdna/DNA_material_types.h
===================================================================
--- branches/soc-2010-moguri/source/blender/makesdna/DNA_material_types.h       
2010-06-04 23:38:59 UTC (rev 29229)
+++ branches/soc-2010-moguri/source/blender/makesdna/DNA_material_types.h       
2010-06-05 00:17:51 UTC (rev 29230)
@@ -75,7 +75,7 @@
 typedef struct CustomUniform {
        struct CustomUniform *next, *prev;
        char name[64];
-       short type, pad[3];
+       short type, size, pad[2];
        void *data;
 } CustomUniform;
 
@@ -230,13 +230,14 @@
 
 /* Uniform type */
 #define MA_UNF_FLOAT   1
-#define MA_UNF_VEC2            2
-#define MA_UNF_VEC3            3
-#define MA_UNF_VEC4            4
-#define MA_UNF_INT             5
-#define MA_UNF_IVEC2   6
-#define MA_UNF_IVEC3   7
-#define MA_UNF_IVEC4   8
+#define MA_UNF_VEC             2
+#define MA_UNF_INT             3
+#define MA_UNF_IVEC            4
+#define MA_UNF_UINT            5
+#define MA_UNF_UVEC            6
+#define MA_UNF_BOOL            7
+#define MA_UNF_BVEC            8
+#define MA_UNF_MAT             9
 
 /* mode (is int) */
 #define MA_TRACEBLE            1

Modified: branches/soc-2010-moguri/source/blender/makesrna/intern/rna_material.c
===================================================================
--- branches/soc-2010-moguri/source/blender/makesrna/intern/rna_material.c      
2010-06-04 23:38:59 UTC (rev 29229)
+++ branches/soc-2010-moguri/source/blender/makesrna/intern/rna_material.c      
2010-06-05 00:17:51 UTC (rev 29230)
@@ -185,6 +185,36 @@
        *max= MAX2(0, *max);
 }
 
+static float rna_FloatUniform_value_get(struct PointerRNA *ptr)
+{
+       CustomUniform *cu= (CustomUniform*)ptr->data;
+       return *(float*)(&cu->data);
+}
+
+static void rna_FloatUniform_value_set(struct PointerRNA *ptr, float value)
+{
+       CustomUniform *cu= (CustomUniform*)ptr->data;
+       *(float*)(&cu->data)= value;
+}
+
+static StructRNA* rna_CustomUniform_refine(struct PointerRNA *ptr)
+{
+       CustomUniform *cu= (CustomUniform*)ptr->data;
+
+       switch(cu->type){
+       case MA_UNF_FLOAT:
+               return &RNA_FloatUniform;
+       case MA_UNF_INT:
+               return &RNA_IntUniform;
+       case MA_UNF_UINT:
+               return &RNA_UIntUniform;
+       //case MA_UNF_BOOL:
+               //return &RNA_BoolUniform;
+       default:
+               return &RNA_CustomUniform;
+       }
+}
+
 static void rna_MaterialStrand_start_size_range(PointerRNA *ptr, float *min, 
float *max)
 {
        Material *ma= (Material*)ptr->id.data;
@@ -925,6 +955,36 @@
        RNA_def_property_update(prop, 0, "rna_Material_update");
 }
 
+/* Helper function for defining the different uniform data types */
+static void rna_def_uniformtype(BlenderRNA *brna, const char *name, const char 
*doc, int type, int subtype, int min, int max)
+{
+       PropertyRNA *prop;
+       StructRNA *srna;
+
+       srna= RNA_def_struct(brna, name, "CustomUniform");
+       RNA_def_struct_ui_text(srna, name, doc);
+       RNA_def_struct_sdna(srna, "CustomUniform");
+
+       prop= RNA_def_property(srna, "value", type, subtype);
+       if (type == PROP_INT)
+               RNA_def_property_int_sdna(prop, NULL, "data");
+       else if (type == PROP_BOOLEAN)
+               RNA_def_property_boolean_sdna(prop, NULL, "data", 1);
+       else if (type == PROP_FLOAT)
+       {
+               RNA_def_property_float_sdna(prop, NULL, "data");
+               RNA_def_property_float_funcs(prop, 
"rna_FloatUniform_value_get", "rna_FloatUniform_value_set", NULL);
+       }
+       RNA_def_property_ui_text(prop, "Value", "Uniform value");
+       RNA_def_property_update(prop, 0, "rna_Material_update");
+
+       prop= RNA_def_property(srna, "size", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "size");
+       RNA_def_property_range(prop, min, max);
+       RNA_def_property_ui_text(prop, "Size", "The number of elements in the 
uniform");
+       RNA_def_property_update(prop, 0, "rna_Material_update");
+}
+
 static void rna_def_material_uniform(BlenderRNA *brna)
 {
        StructRNA *srna;
@@ -932,19 +992,20 @@
 
        static EnumPropertyItem prop_type_items[] = {
                {MA_UNF_FLOAT, "FLOAT", 0, "float", "float"},
-               {MA_UNF_VEC2, "VEC2", 0, "vec2", "vec2"},
-               {MA_UNF_VEC3, "VEC3", 0, "vec3", "vec3"},
-               {MA_UNF_VEC4, "VEC4", 0, "vec4", "vec4"},
+               //{MA_UNF_VEC, "VEC", 0, "vec", "vec"},
                {MA_UNF_INT, "INT", 0, "int", "int"},
-               {MA_UNF_IVEC2, "IVEC2", 0, "ivec2", "ivec2"},
-               {MA_UNF_IVEC3, "IVEC3", 0, "ivec3", "ivec3"},
-               {MA_UNF_IVEC4, "IVEC4", 0, "ivec4", "ivec4"},
+               //{MA_UNF_IVEC2, "IVEC", 0, "ivec", "ivec"},
+               {MA_UNF_UINT, "UINT", 0, "uint", "uint"},
+               //{MA_UNF_UVEC, "UVEC", 0, "uvec", "uvec"},
+               {MA_UNF_BOOL, "BOOL", 0, "bool", "bool"},
+               //{MA_UNF_BVEC, "BVEC", 0, "bvec", "bvec"},
                {0, NULL, 0, NULL, NULL}};
 
        srna= RNA_def_struct(brna, "CustomUniform", NULL);
        RNA_def_struct_sdna(srna, "CustomUniform");
        RNA_def_struct_nested(brna, srna, "Material");
        RNA_def_struct_ui_text(srna, "Uniform", "Uniform data for custom 
shaders.");
+       RNA_def_struct_refine_func(srna, "rna_CustomUniform_refine");
 
        prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
        RNA_def_struct_name_property(srna, prop);
@@ -957,8 +1018,13 @@
        RNA_def_property_enum_items(prop, prop_type_items);
        RNA_def_property_ui_text(prop, "Uniform type", "The data type of the 
uniform");
        RNA_def_property_update(prop, 0, "rna_Material_update");
+
+       rna_def_uniformtype(brna, "FloatUniform", "Custom float uniform", 
PROP_FLOAT, PROP_NONE, 1, 1);
+       rna_def_uniformtype(brna, "IntUniform", "Custom integer uniform", 
PROP_INT, PROP_NONE, 1, 1);
+       rna_def_uniformtype(brna, "UIntUniform", "Custom unsigned integer 
uniform", PROP_INT, PROP_UNSIGNED, 1, 1);
+       //rna_def_uniformtype(brna, "BoolUniform", "Custom boolean uniform", 
PROP_BOOLEAN, PROP_NONE, 1, 1);
+
 }
-
 static void rna_def_material_raymirror(BlenderRNA *brna)
 {
        StructRNA *srna;


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to