Revision: 36521
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36521
Author:   lukastoenne
Date:     2011-05-06 19:38:51 +0000 (Fri, 06 May 2011)
Log Message:
-----------
Fix for problematic storage of RNA property subtype values in blend files. This 
would break backwards compatibility sooner or later when the PropertySubType 
enum is changed.

As a solution the socket default value subtypes are now a separate list of 
values in DNA. These values are then translated to RNA subtypes by makesrna.

Modified Paths:
--------------
    branches/particles-2010/source/blender/makesdna/DNA_node_types.h
    branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
    
branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_alphaOver.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_blur.c
    
branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_brightness.c
    
branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_colorSpill.c
    
branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c
    
branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_composite.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_curves.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_defocus.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_dilate.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_displace.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_filter.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_gamma.c
    
branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_hueSatVal.c
    
branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_huecorrect.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_idMask.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_invert.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_lensdist.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_mapUV.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_mapValue.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_math.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_mixrgb.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_normal.c
    
branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_normalize.c
    
branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_outputFile.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_rotate.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_scale.c
    
branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_sepcombHSVA.c
    
branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_sepcombRGBA.c
    
branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_sepcombYCCA.c
    
branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_sepcombYUVA.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_setalpha.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_texture.c
    
branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_translate.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_valToRgb.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_vecBlur.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_viewer.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_zcombine.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_curves.c
    
branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_hueSatVal.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_invert.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_mapping.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_material.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_math.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_mixRgb.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_normal.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_output.c
    
branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_sepcombRGB.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_squeeze.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_texture.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_valToRgb.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_vectMath.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_at.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_bricks.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_checker.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_compose.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_distance.c
    
branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_hueSatVal.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_math.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_mixRgb.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_output.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_proc.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_rotate.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_scale.c
    
branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_translate.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_valToNor.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_valToRgb.c
    branches/particles-2010/source/blender/nodes/intern/node_socket.h

Modified: branches/particles-2010/source/blender/makesdna/DNA_node_types.h
===================================================================
--- branches/particles-2010/source/blender/makesdna/DNA_node_types.h    
2011-05-06 15:31:45 UTC (rev 36520)
+++ branches/particles-2010/source/blender/makesdna/DNA_node_types.h    
2011-05-06 19:38:51 UTC (rev 36521)
@@ -99,6 +99,16 @@
        bNodeStack ns;                          /* custom data for inputs, only 
UI writes in this */
 } bNodeSocket;
 
+/* sock->type */
+#define SOCK_VALUE                     0
+#define SOCK_VECTOR                    1
+#define SOCK_RGBA                      2
+#define SOCK_INT                       3
+#define SOCK_BOOLEAN           4
+#define SOCK_FLOAT                     5
+#define SOCK_MESH                      6
+#define NUM_SOCKET_TYPES       7       /* must be last! */
+
 /* socket side (input/output) */
 #define SOCK_IN                1
 #define SOCK_OUT       2
@@ -267,6 +277,8 @@
        float value;
        float min, max;
 } bNodeSocketValueFloat;
+/* value sockets use the same data as floats, typedef for RNA */
+typedef struct bNodeSocketValueFloat bNodeSocketValueValue;
 
 typedef struct bNodeSocketValueBoolean {
        char value;
@@ -283,7 +295,27 @@
        float value[4];
 } bNodeSocketValueRGBA;
 
+/* Socket value subtypes.
+ * Make sure these use the same suffix as their RNA counterparts,
+ * so the RNA definitions macros can match the subtype definitions.
+ * When adding a new subtype here, make sure you also add it
+ * to the NODE_DEFINE_SUBTYPES macro in node_socket.h.
+ */
+#define SOCK_SUBTYPE_NONE                      0
+#define SOCK_SUBTYPE_UNSIGNED          1
+#define SOCK_SUBTYPE_PERCENTAGE                2
+#define SOCK_SUBTYPE_FACTOR                    3
+#define SOCK_SUBTYPE_ANGLE                     4
+#define SOCK_SUBTYPE_TIME                      5
+#define SOCK_SUBTYPE_DISTANCE          6
+#define SOCK_SUBTYPE_TRANSLATION       7
+#define SOCK_SUBTYPE_DIRECTION         8
+#define SOCK_SUBTYPE_VELOCITY          9
+#define SOCK_SUBTYPE_ACCELERATION      10
+#define SOCK_SUBTYPE_EULER                     11
+#define SOCK_SUBTYPE_XYZ                       12
 
+
 /* data structs, for node->storage */
 
 /* this one has been replaced with ImageUser, keep it for do_versions() */

Modified: branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c       
2011-05-06 15:31:45 UTC (rev 36520)
+++ branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c       
2011-05-06 19:38:51 UTC (rev 36521)
@@ -118,6 +118,40 @@
 {0, NULL, 0, NULL, NULL}};
 
 
+/* Add any new socket value subtype here.
+ * When adding a new subtype here, make sure you also add it
+ * to the subtype definitions in DNA_node_types.h.
+ * This macro is used by the RNA and the internal converter functions
+ * to define all socket subtypes. The SUBTYPE macro must be defined
+ * before using this macro, and undefined afterwards.
+ */
+#define NODE_DEFINE_SUBTYPES_INT \
+SUBTYPE(INT, Int, NONE, None) \
+SUBTYPE(INT, Int, UNSIGNED, Unsigned)
+
+#define NODE_DEFINE_SUBTYPES_FLOAT \
+SUBTYPE(FLOAT, Float, NONE, None) \
+SUBTYPE(FLOAT, Float, UNSIGNED, Unsigned) \
+SUBTYPE(FLOAT, Float, PERCENTAGE, Percentage) \
+SUBTYPE(FLOAT, Float, FACTOR, Factor) \
+SUBTYPE(FLOAT, Float, ANGLE, Angle) \
+SUBTYPE(FLOAT, Float, TIME, Time) \
+SUBTYPE(FLOAT, Float, DISTANCE, Distance)
+
+#define NODE_DEFINE_SUBTYPES_VECTOR \
+SUBTYPE(VECTOR, Vector, NONE, None) \
+SUBTYPE(VECTOR, Vector, TRANSLATION, Translation) \
+SUBTYPE(VECTOR, Vector, DIRECTION, Direction) \
+SUBTYPE(VECTOR, Vector, VELOCITY, Velocity) \
+SUBTYPE(VECTOR, Vector, ACCELERATION, Acceleration) \
+SUBTYPE(VECTOR, Vector, EULER, Euler) \
+SUBTYPE(VECTOR, Vector, XYZ, XYZ)
+
+#define NODE_DEFINE_SUBTYPES \
+NODE_DEFINE_SUBTYPES_INT \
+NODE_DEFINE_SUBTYPES_FLOAT \
+NODE_DEFINE_SUBTYPES_VECTOR
+
 #ifdef RNA_RUNTIME
 
 #include "BLI_linklist.h"
@@ -180,49 +214,37 @@
        bNodeSocket *sock= (bNodeSocket*)ptr->data;
        
        if (sock->default_value) {
-               StructRNA *type= &RNA_NodeSocket;
+               /* This returns the refined socket type with the full definition
+                * of the default input value with type and subtype.
+                */
                
+               #define SUBTYPE(socktype, stypename, id, idname) \
+               { \
+                       bNodeSocketValue##stypename *value= 
(bNodeSocketValue##stypename*)sock->default_value; \
+                       if (value->subtype==SOCK_SUBTYPE_##id) \
+                               return &RNA_NodeSocket##stypename##idname; \
+               }
+               
                switch (sock->type) {
                case SOCK_VALUE:
                case SOCK_FLOAT:
-                       {
-                               bNodeSocketValueFloat *value= 
(bNodeSocketValueFloat*)sock->default_value;
-                               
-                               #define DefSocketSubtypeFloat(name, _subtype) \
-                               if (value->subtype==_subtype) \
-                                       type = &RNA_NodeSocketFloat##name;
-                               #include "rna_nodetree_types.h"
-                       }
+                       NODE_DEFINE_SUBTYPES_FLOAT
                        break;
                case SOCK_INT:
-                       {
-                               bNodeSocketValueInt *value= 
(bNodeSocketValueInt*)sock->default_value;
-                               
-                               #define DefSocketSubtypeInt(name, _subtype) \
-                               if (value->subtype==_subtype) \
-                                       type = &RNA_NodeSocketInt##name;
-                               #include "rna_nodetree_types.h"
-                       }
+                       NODE_DEFINE_SUBTYPES_INT
                        break;
                case SOCK_BOOLEAN:
-                       type = &RNA_NodeSocketBoolean;
+                       return &RNA_NodeSocketBoolean;
                        break;
                case SOCK_VECTOR:
-                       {
-                               bNodeSocketValueVector *value= 
(bNodeSocketValueVector*)sock->default_value;
-                               
-                               #define DefSocketSubtypeVector(name, _subtype) \
-                               if (value->subtype==_subtype) \
-                                       type = &RNA_NodeSocketVector##name;
-                               #include "rna_nodetree_types.h"
-                       }
+                       NODE_DEFINE_SUBTYPES_VECTOR
                        break;
                case SOCK_RGBA:
-                       type = &RNA_NodeSocketRGBA;
+                       return &RNA_NodeSocketRGBA;
                        break;
                }
                
-               return type;
+               #undef SUBTYPE
        }
        
        return &RNA_NodeSocket;
@@ -2650,52 +2672,22 @@
        RNA_def_property_update(prop, NC_NODE|NA_EDITED, 
"rna_NodeGroupSocket_update");
 }
 
-static void rna_def_node_socket_int(BlenderRNA *brna, const char *name, const 
char *ui_name, int subtype)
+static void rna_def_node_socket_subtype(BlenderRNA *brna, int type, int 
subtype, const char *name, const char *ui_name)
 {
        StructRNA *srna;
        PropertyRNA *prop=NULL;
        
-       #define DefSocketSubtypeInt(name, subtype) \
-       { subtype, #subtype, 0, #name, ""},
-
-       static EnumPropertyItem subtype_items[] = {
-               #include "rna_nodetree_types.h"
-               {0, NULL, 0, NULL, NULL}
-       };
+       PropertySubType propsubtype= PROP_NONE;
+       #define SUBTYPE(socktype, stypename, id, idname)        if 
(subtype==SOCK_SUBTYPE_##id) propsubtype = PROP_##id;
+       NODE_DEFINE_SUBTYPES
+       #undef SUBTYPE
        
-       srna = RNA_def_struct(brna, name, "NodeSocket");
-       RNA_def_struct_ui_text(srna, ui_name, "Input or output socket of a 
node");
-       RNA_def_struct_sdna(srna, "bNodeSocket");
-       RNA_def_struct_ui_icon(srna, ICON_PLUG);
-       RNA_def_struct_path_func(srna, "rna_NodeSocket_path");
-       
-       RNA_def_struct_sdna_from(srna, "bNodeSocketValueInt", "default_value");
-       
-       prop = RNA_def_property(srna, "subtype", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_sdna(prop, NULL, "subtype");
-       RNA_def_property_enum_items(prop, subtype_items);
-       RNA_def_property_ui_text(prop, "Subtype", "Subtype defining the socket 
value details");
-       RNA_def_property_update(prop, NC_NODE|NA_EDITED, 
"rna_NodeSocket_update");
-       
-       prop = RNA_def_property(srna, "default_value", PROP_INT, subtype);
-       RNA_def_property_int_sdna(prop, NULL, "value");
-       RNA_def_property_int_funcs(prop, NULL, NULL, "rna_NodeSocketInt_range");
-       RNA_def_property_ui_text(prop, "Default Value", "");
-       RNA_def_property_update(prop, NC_NODE|NA_EDITED, 
"rna_NodeSocket_update");
-}
-
-static void rna_def_node_socket_float(BlenderRNA *brna, const char *name, 
const char *ui_name, int subtype)
-{
-       StructRNA *srna;
-       PropertyRNA *prop=NULL;
-       
-       #define DefSocketSubtypeFloat(name, subtype) \
-       { subtype, #subtype, 0, #name, ""},
-
+       #define SUBTYPE(socktype, stypename, id, idname)        { 
SOCK_SUBTYPE_##id, #id, 0, #idname, ""},
        static EnumPropertyItem subtype_items[] = {
-               #include "rna_nodetree_types.h"
+               NODE_DEFINE_SUBTYPES
                {0, NULL, 0, NULL, NULL}
        };
+       #undef SUBTYPE
        
        srna = RNA_def_struct(brna, name, "NodeSocket");
        RNA_def_struct_ui_text(srna, ui_name, "Input or output socket of a 
node");
@@ -2703,93 +2695,71 @@
        RNA_def_struct_ui_icon(srna, ICON_PLUG);
        RNA_def_struct_path_func(srna, "rna_NodeSocket_path");
        
-       RNA_def_struct_sdna_from(srna, "bNodeSocketValueFloat", 
"default_value");
-       
-       prop = RNA_def_property(srna, "subtype", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_sdna(prop, NULL, "subtype");
-       RNA_def_property_enum_items(prop, subtype_items);
-       RNA_def_property_ui_text(prop, "Subtype", "Subtype defining the socket 
value details");
-       RNA_def_property_update(prop, NC_NODE|NA_EDITED, 
"rna_NodeSocket_update");
-       
-       prop = RNA_def_property(srna, "default_value", PROP_FLOAT, subtype);
-       RNA_def_property_float_sdna(prop, NULL, "value");
-       RNA_def_property_float_funcs(prop, NULL, NULL, 
"rna_NodeSocketFloat_range");
-       RNA_def_property_ui_text(prop, "Default Value", "");
-       RNA_def_property_update(prop, NC_NODE|NA_EDITED, 
"rna_NodeSocket_update");
+       switch (type) {
+       case SOCK_INT:
+               RNA_def_struct_sdna_from(srna, "bNodeSocketValueInt", 
"default_value");
+               
+               prop = RNA_def_property(srna, "subtype", PROP_ENUM, PROP_NONE);
+               RNA_def_property_enum_sdna(prop, NULL, "subtype");
+               RNA_def_property_enum_items(prop, subtype_items);
+               RNA_def_property_ui_text(prop, "Subtype", "Subtype defining the 
socket value details");
+               RNA_def_property_update(prop, NC_NODE|NA_EDITED, 
"rna_NodeSocket_update");
+               
+               prop = RNA_def_property(srna, "default_value", PROP_INT, 
propsubtype);
+               RNA_def_property_int_sdna(prop, NULL, "value");
+               RNA_def_property_int_funcs(prop, NULL, NULL, 
"rna_NodeSocketInt_range");
+               RNA_def_property_ui_text(prop, "Default Value", "");
+               RNA_def_property_update(prop, NC_NODE|NA_EDITED, 
"rna_NodeSocket_update");
+               break;
+       case SOCK_FLOAT:
+               RNA_def_struct_sdna_from(srna, "bNodeSocketValueFloat", 
"default_value");
+               
+               prop = RNA_def_property(srna, "subtype", PROP_ENUM, PROP_NONE);
+               RNA_def_property_enum_sdna(prop, NULL, "subtype");
+               RNA_def_property_enum_items(prop, subtype_items);
+               RNA_def_property_ui_text(prop, "Subtype", "Subtype defining the 
socket value details");
+               RNA_def_property_update(prop, NC_NODE|NA_EDITED, 
"rna_NodeSocket_update");
+               
+               prop = RNA_def_property(srna, "default_value", PROP_FLOAT, 
propsubtype);
+               RNA_def_property_float_sdna(prop, NULL, "value");
+               RNA_def_property_float_funcs(prop, NULL, NULL, 
"rna_NodeSocketFloat_range");
+               RNA_def_property_ui_text(prop, "Default Value", "");
+               RNA_def_property_update(prop, NC_NODE|NA_EDITED, 
"rna_NodeSocket_update");
+               break;
+       case SOCK_BOOLEAN:

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to