Cycles: svn merge -r36352:36495 https://svn.blender.org/svnroot/bf-blender/trunk...
[blender.git] / source / blender / makesrna / intern / rna_nodetree.c
index 3c26c18f17f57612a4db00449955b0401987ef3c..8601a986c3f01596cd3a98284835f336f26ea4f3 100644 (file)
@@ -99,6 +99,28 @@ EnumPropertyItem node_filter_items[] = {
 {6, "SHADOW",  0, "Shadow",  ""},
 {0, NULL, 0, NULL, NULL}};
 
+EnumPropertyItem prop_noise_basis_items[] = {
+       {SHD_NOISE_PERLIN, "PERLIN", 0, "Perlin", ""},
+       {SHD_NOISE_VORONOI_F1, "VORONOI_F1", 0, "Voronoi F1", ""},
+       {SHD_NOISE_VORONOI_F2, "VORONOI_F2", 0, "Voronoi F2", ""},
+       {SHD_NOISE_VORONOI_F3, "VORONOI_F3", 0, "Voronoi F3", ""},
+       {SHD_NOISE_VORONOI_F4, "VORONOI_F4", 0, "Voronoi F4", ""},
+       {SHD_NOISE_VORONOI_F2_F1, "VORONOI_F2_F1", 0, "Voronoi F2-F1", ""},
+       {SHD_NOISE_VORONOI_CRACKLE, "VORONOI_CRACKLE", 0, "Voronoi Crackle", ""},
+       {SHD_NOISE_CELL_NOISE, "CELL_NOISE", 0, "Cell Noise", ""},
+       {0, NULL, 0, NULL, NULL}};
+
+EnumPropertyItem prop_noise_type_items[] = {
+       {SHD_NOISE_SOFT, "SOFT", 0, "Soft", ""},
+       {SHD_NOISE_HARD, "HARD", 0, "Hard", ""},
+       {0, NULL, 0, NULL, NULL}};
+
+EnumPropertyItem prop_wave_items[] = {
+       {SHD_WAVE_SINE, "SINE", 0, "Sine", "Uses a sine wave to produce bands"},
+       {SHD_WAVE_SAW, "SAW", 0, "Saw", "Uses a saw wave to produce bands"},
+       {SHD_WAVE_TRI, "TRI", 0, "Tri", "Uses a triangle wave to produce bands"},
+       {0, NULL, 0, NULL, NULL}};
+
 #ifdef RNA_RUNTIME
 
 #include "BLI_linklist.h"
@@ -142,8 +164,10 @@ static StructRNA *rna_NodeSocketType_refine(struct PointerRNA *ptr)
                        return &RNA_VectorNodeSocket;
                case SOCK_RGBA:
                        return &RNA_RGBANodeSocket;
+               case SOCK_CLOSURE:
+                       return &RNA_ClosureNodeSocket;
                default:
-                       return &RNA_UnknownType;
+                       return &RNA_NodeSocket;
        }
 }              
 
@@ -159,7 +183,7 @@ static StructRNA *rna_NodeTree_refine(struct PointerRNA *ptr)
                case NTREE_TEXTURE:
                        return &RNA_TextureNodeTree;
                default:
-                       return &RNA_UnknownType;
+                       return &RNA_NodeTree;
        }
 }
 
@@ -668,6 +692,12 @@ static EnumPropertyItem node_ycc_items[] = {
 { 2, "JFIF",     0, "Jpeg",     ""},
 {0, NULL, 0, NULL, NULL}};
 
+static EnumPropertyItem node_glossy_items[] = {
+{SHD_GLOSSY_SHARP,    "SHARP",    0, "Sharp",    ""},
+{SHD_GLOSSY_BECKMANN, "BECKMANN", 0, "Beckmann", ""},
+{SHD_GLOSSY_GGX,      "GGX",      0, "GGX",      ""},
+{0, NULL, 0, NULL, NULL}};
+
 #define MaxNodes 1000
 
 enum
@@ -997,6 +1027,325 @@ static void def_sh_geometry(StructRNA *srna)
        RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 }
 
+static void def_sh_tex_sky(StructRNA *srna)
+{
+       PropertyRNA *prop;
+       
+       RNA_def_struct_sdna_from(srna, "NodeTexSky", "storage");
+       
+       prop = RNA_def_property(srna, "sun_direction", PROP_FLOAT, PROP_DIRECTION);
+       RNA_def_property_ui_text(prop, "Sun Direction", "Direction from where the sun is shining");
+       RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+       
+       prop = RNA_def_property(srna, "turbidity", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_ui_text(prop, "Turbidity", "");
+       RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+}
+
+static void def_sh_tex_environment(StructRNA *srna)
+{
+       PropertyRNA *prop;
+
+       prop = RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
+       RNA_def_property_pointer_sdna(prop, NULL, "id");
+       RNA_def_property_struct_type(prop, "Image");
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_ui_text(prop, "Image", "");
+       RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+       RNA_def_struct_sdna_from(srna, "NodeTexEnvironment", "storage");
+}
+
+static void def_sh_tex_image(StructRNA *srna)
+{
+       PropertyRNA *prop;
+
+       prop = RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
+       RNA_def_property_pointer_sdna(prop, NULL, "id");
+       RNA_def_property_struct_type(prop, "Image");
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_ui_text(prop, "Image", "");
+       RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+       RNA_def_struct_sdna_from(srna, "NodeTexImage", "storage");
+}
+
+static void def_sh_tex_blend(StructRNA *srna)
+{
+       static EnumPropertyItem prop_blend_progression[] = {
+               {SHD_BLEND_LINEAR, "LINEAR", 0, "Linear", "Creates a linear progression"},
+               {SHD_BLEND_QUADRATIC, "QUADRATIC", 0, "Quadratic", "Creates a quadratic progression"},
+               {SHD_BLEND_EASING, "EASING", 0, "Easing", "Creates a progression easing from one step to the next"},
+               {SHD_BLEND_DIAGONAL, "DIAGONAL", 0, "Diagonal", "Creates a diagonal progression"},
+               {SHD_BLEND_SPHERICAL, "SPHERICAL", 0, "Spherical", "Creates a spherical progression"},
+               {SHD_BLEND_QUADRATIC_SPHERE, "QUADRATIC_SPHERE", 0, "Quadratic sphere", "Creates a quadratic progression in the shape of a sphere"},
+               {SHD_BLEND_RADIAL, "RADIAL", 0, "Radial", "Creates a radial progression"},
+               {0, NULL, 0, NULL, NULL}};
+
+       static const EnumPropertyItem prop_axis_items[]= {
+               {SHD_BLEND_HORIZONTAL, "HORIZONTAL", 0, "Horizontal", "Flips the texture's X and Y axis"},
+               {SHD_BLEND_VERTICAL, "VERTICAL", 0, "Vertical", "Flips the texture's X and Y axis"},
+               {0, NULL, 0, NULL, NULL}};
+
+       PropertyRNA *prop;
+       
+       RNA_def_struct_sdna_from(srna, "NodeTexBlend", "storage");
+
+       prop= RNA_def_property(srna, "progression", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "progression");
+       RNA_def_property_enum_items(prop, prop_blend_progression);
+       RNA_def_property_ui_text(prop, "Progression", "Sets the style of the color blending");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+
+       prop= RNA_def_property(srna, "axis", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_bitflag_sdna(prop, NULL, "axis");
+       RNA_def_property_enum_items(prop, prop_axis_items);
+       RNA_def_property_ui_text(prop, "Axis", "Flips the texture's X and Y axis");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+}
+
+static void def_sh_tex_clouds(StructRNA *srna)
+{
+       PropertyRNA *prop;
+       
+       RNA_def_struct_sdna_from(srna, "NodeTexClouds", "storage");
+
+       prop= RNA_def_property(srna, "noise_basis", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "basis");
+       RNA_def_property_enum_items(prop, prop_noise_basis_items);
+       RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+
+       prop= RNA_def_property(srna, "noise_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "hard");
+       RNA_def_property_enum_items(prop, prop_noise_type_items);
+       RNA_def_property_ui_text(prop, "Noise Type", "");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+
+       prop= RNA_def_property(srna, "turbulence_depth", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "depth");
+       RNA_def_property_range(prop, 0, 30);
+       RNA_def_property_ui_text(prop, "Depth", "Level of detail in the added turbulent noise");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+}
+
+static void def_sh_tex_distnoise(StructRNA *srna)
+{
+       PropertyRNA *prop;
+       
+       RNA_def_struct_sdna_from(srna, "NodeTexDistortedNoise", "storage");
+
+       prop= RNA_def_property(srna, "noise_basis", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "basis");
+       RNA_def_property_enum_items(prop, prop_noise_basis_items);
+       RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+
+       prop= RNA_def_property(srna, "noise_distortion", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "distortion_basis");
+       RNA_def_property_enum_items(prop, prop_noise_basis_items);
+       RNA_def_property_ui_text(prop, "Noise Distortion", "Sets the noise basis used for distortion");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+}
+
+static void def_sh_tex_magic(StructRNA *srna)
+{
+       PropertyRNA *prop;
+       
+       RNA_def_struct_sdna_from(srna, "NodeTexMagic", "storage");
+
+       prop= RNA_def_property(srna, "turbulence_depth", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "depth");
+       RNA_def_property_range(prop, 0, 10);
+       RNA_def_property_ui_text(prop, "Depth", "Level of detail in the added turbulent noise");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+}
+
+static void def_sh_tex_marble(StructRNA *srna)
+{
+       static EnumPropertyItem prop_marble_stype[] = {
+               {SHD_MARBLE_SOFT, "SOFT", 0, "Soft", "Uses soft marble"},
+               {SHD_MARBLE_SHARP, "SHARP", 0, "Sharp", "Uses more clearly defined marble"},
+               {SHD_MARBLE_SHARPER, "SHARPER", 0, "Sharper", "Uses very clearly defined marble"},
+               {0, NULL, 0, NULL, NULL}};
+
+       PropertyRNA *prop;
+       
+       RNA_def_struct_sdna_from(srna, "NodeTexMarble", "storage");
+
+       prop= RNA_def_property(srna, "marble_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "type");
+       RNA_def_property_enum_items(prop, prop_marble_stype);
+       RNA_def_property_ui_text(prop, "Type", "");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+
+       prop= RNA_def_property(srna, "noise_basis", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "basis");
+       RNA_def_property_enum_items(prop, prop_noise_basis_items);
+       RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+
+       prop= RNA_def_property(srna, "noise_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "hard");
+       RNA_def_property_enum_items(prop, prop_noise_type_items);
+       RNA_def_property_ui_text(prop, "Noise Type", "");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+
+       prop= RNA_def_property(srna, "turbulence_depth", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "depth");
+       RNA_def_property_range(prop, 0, 30);
+       RNA_def_property_ui_text(prop, "Depth", "Level of detail in the added turbulent noise");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+
+       prop= RNA_def_property(srna, "wave_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "wave");
+       RNA_def_property_enum_items(prop, prop_wave_items);
+       RNA_def_property_ui_text(prop, "Wave Type", "");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+}
+
+static void def_sh_tex_musgrave(StructRNA *srna)
+{
+       static EnumPropertyItem prop_musgrave_type[] = {
+               {SHD_MUSGRAVE_MULTIFRACTAL, "MULTIFRACTAL", 0, "Multifractal", ""},
+               {SHD_MUSGRAVE_RIDGED_MULTIFRACTAL, "RIDGED_MULTIFRACTAL", 0, "Ridged Multifractal", ""},
+               {SHD_MUSGRAVE_HYBRID_MULTIFRACTAL, "HYBRID_MULTIFRACTAL", 0, "Hybrid Multifractal", ""},
+               {SHD_MUSGRAVE_FBM, "FBM", 0, "fBM", ""},
+               {SHD_MUSGRAVE_HETERO_TERRAIN, "HETERO_TERRAIN", 0, "Hetero Terrain", ""},
+               {0, NULL, 0, NULL, NULL}};
+
+       PropertyRNA *prop;
+       
+       RNA_def_struct_sdna_from(srna, "NodeTexMusgrave", "storage");
+
+       prop= RNA_def_property(srna, "musgrave_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "type");
+       RNA_def_property_enum_items(prop, prop_musgrave_type);
+       RNA_def_property_ui_text(prop, "Type", "");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+
+       prop= RNA_def_property(srna, "noise_basis", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "basis");
+       RNA_def_property_enum_items(prop, prop_noise_basis_items);
+       RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+}
+
+static void def_sh_tex_stucci(StructRNA *srna)
+{
+       static EnumPropertyItem prop_stucci_stype[] = {
+       {SHD_STUCCI_PLASTIC, "PLASTIC", 0, "Plastic", "Uses standard stucci"},
+       {SHD_STUCCI_WALL_IN, "WALL_IN", 0, "Wall in", "Creates Dimples"},
+       {SHD_STUCCI_WALL_OUT, "WALL_OUT", 0, "Wall out", "Creates Ridges"},
+       {0, NULL, 0, NULL, NULL}};
+
+       PropertyRNA *prop;
+       
+       RNA_def_struct_sdna_from(srna, "NodeTexStucci", "storage");
+
+       prop= RNA_def_property(srna, "stucci_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "type");
+       RNA_def_property_enum_items(prop, prop_stucci_stype);
+       RNA_def_property_ui_text(prop, "Type", "");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+
+       prop= RNA_def_property(srna, "noise_basis", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "basis");
+       RNA_def_property_enum_items(prop, prop_noise_basis_items);
+       RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+
+       prop= RNA_def_property(srna, "noise_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "hard");
+       RNA_def_property_enum_items(prop, prop_noise_type_items);
+       RNA_def_property_ui_text(prop, "Noise Type", "");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+}
+
+static void def_sh_tex_voronoi(StructRNA *srna)
+{
+       static EnumPropertyItem prop_distance_metric_items[] = {
+               {SHD_VORONOI_ACTUAL_DISTANCE, "DISTANCE", 0, "Actual Distance", ""},
+               {SHD_VORONOI_DISTANCE_SQUARED, "DISTANCE_SQUARED", 0, "Distance Squared", ""},
+               {SHD_VORONOI_MANHATTAN, "MANHATTAN", 0, "Manhattan", ""},
+               {SHD_VORONOI_CHEBYCHEV, "CHEBYCHEV", 0, "Chebychev", ""},
+               {SHD_VORONOI_MINKOVSKY_H, "MINKOVSKY_HALF", 0, "Minkovsky 1/2", ""},
+               {SHD_VORONOI_MINKOVSKY_4, "MINKOVSKY_FOUR", 0, "Minkovsky 4", ""},
+               {SHD_VORONOI_MINKOVSKY, "MINKOVSKY", 0, "Minkovsky", ""},
+               {0, NULL, 0, NULL, NULL}};
+
+       static EnumPropertyItem prop_coloring_items[] = {
+               {SHD_VORONOI_INTENSITY, "INTENSITY", 0, "Intensity", "Only calculate intensity"},
+               {SHD_VORONOI_POSITION, "POSITION", 0, "Position", "Color cells by position"},
+               {SHD_VORONOI_POSITION_OUTLINE, "POSITION_OUTLINE", 0, "Position and Outline", "Use position plus an outline based on F2-F.1"},
+               {SHD_VORONOI_POSITION_OUTLINE_INTENSITY, "POSITION_OUTLINE_INTENSITY", 0, "Position, Outline, and Intensity", "Multiply position and outline by intensity"},
+               {0, NULL, 0, NULL, NULL}};
+
+       PropertyRNA *prop;
+       
+       RNA_def_struct_sdna_from(srna, "NodeTexVoronoi", "storage");
+
+       prop= RNA_def_property(srna, "distance_metric", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "distance_metric");
+       RNA_def_property_enum_items(prop, prop_distance_metric_items);
+       RNA_def_property_ui_text(prop, "Distance Metric", "");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+
+       prop= RNA_def_property(srna, "coloring", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "coloring");
+       RNA_def_property_enum_items(prop, prop_coloring_items);
+       RNA_def_property_ui_text(prop, "Coloring", "");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+}
+
+static void def_sh_tex_wood(StructRNA *srna)
+{
+       static EnumPropertyItem prop_wood_type_items[] = {
+       {SHD_WOOD_BANDS, "BANDS", 0, "Bands", "Uses standard wood texture in bands"},
+       {SHD_WOOD_RINGS, "RINGS", 0, "Rings", "Uses wood texture in rings"},
+       {SHD_WOOD_BAND_NOISE, "BAND_NOISE", 0, "Band Noise", "Adds noise to standard wood"},
+       {SHD_WOOD_RING_NOISE, "RING_NOISE", 0, "Ring Noise", "Adds noise to rings"},
+       {0, NULL, 0, NULL, NULL}};
+
+       PropertyRNA *prop;
+       
+       RNA_def_struct_sdna_from(srna, "NodeTexWood", "storage");
+
+       prop= RNA_def_property(srna, "noise_basis", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "basis");
+       RNA_def_property_enum_items(prop, prop_noise_basis_items);
+       RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+
+       prop= RNA_def_property(srna, "noise_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "hard");
+       RNA_def_property_enum_items(prop, prop_noise_type_items);
+       RNA_def_property_ui_text(prop, "Noise Type", "");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+
+       prop= RNA_def_property(srna, "wood_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "type");
+       RNA_def_property_enum_items(prop, prop_wood_type_items);
+       RNA_def_property_ui_text(prop, "Wood Type", "");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+
+       prop= RNA_def_property(srna, "wave_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "wave");
+       RNA_def_property_enum_items(prop, prop_wave_items);
+       RNA_def_property_ui_text(prop, "Wave Type", "");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
+}
+
+static void def_glossy(StructRNA *srna)
+{
+       PropertyRNA *prop;
+       
+       prop = RNA_def_property(srna, "distribution", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "custom1");
+       RNA_def_property_enum_items(prop, node_glossy_items);
+       RNA_def_property_ui_text(prop, "Distribution", "");
+       RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+}
 
 /* -- Compositor Nodes ------------------------------------------------------ */
 
@@ -2536,6 +2885,16 @@ static void rna_def_node_socket(BlenderRNA *brna)
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
        RNA_def_property_enum_items(prop, node_socket_type_items);
        RNA_def_property_ui_text(prop, "Type", "Node Socket type");
+
+       prop = RNA_def_property(srna, "group_socket", PROP_POINTER, PROP_NONE);
+       RNA_def_property_pointer_sdna(prop, NULL, "groupsock");
+       RNA_def_property_struct_type(prop, "NodeSocket");
+       RNA_def_property_ui_text(prop, "Group Socket", "For group nodes, the group input or output socket this corresponds to");
+
+       prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SOCK_COLLAPSED);
+       RNA_def_property_ui_text(prop, "Expanded", "Socket links are expanded in the user interface");
+       RNA_def_property_update(prop, NC_NODE|NA_EDITED, NULL);
 }
 
 static void rna_def_node_socket_value(BlenderRNA *brna)
@@ -2595,6 +2954,17 @@ static void rna_def_node_socket_rgba(BlenderRNA *brna)
        RNA_def_property_float_funcs(prop, NULL, NULL, "rna_NodeSocket_defvalue_range");
 }
 
+static void rna_def_node_socket_closure(BlenderRNA *brna)
+{
+       StructRNA *srna;
+
+       srna = RNA_def_struct(brna, "ClosureNodeSocket", "NodeSocket");
+       RNA_def_struct_ui_text(srna, "Closure Node Socket", "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");
+}
+
 static void rna_def_node(BlenderRNA *brna)
 {
        StructRNA *srna;
@@ -2824,6 +3194,7 @@ void RNA_def_nodetree(BlenderRNA *brna)
        rna_def_node_socket_value(brna);
        rna_def_node_socket_vector(brna);
        rna_def_node_socket_rgba(brna);
+       rna_def_node_socket_closure(brna);
        rna_def_node(brna);
        rna_def_node_link(brna);
        rna_def_shader_node(brna);