Merge branch 'master' into blender2.8
[blender.git] / source / blender / makesrna / intern / rna_nodetree.c
index 33c6cc687635bdb69f3b5d8c4aa738610a4e6552..2b2c6998eb4aa1990f071e5efb3e41281c180777 100644 (file)
@@ -66,6 +66,8 @@
 
 #include "NOD_composite.h"
 
+#include "DEG_depsgraph.h"
+
 const EnumPropertyItem rna_enum_node_socket_in_out_items[] = {
        { SOCK_IN, "IN", 0, "Input", "" },
        { SOCK_OUT, "OUT", 0, "Output", "" },
@@ -187,6 +189,8 @@ static const EnumPropertyItem node_sampler_type_items[] = {
 #include "ED_node.h"
 #include "ED_render.h"
 
+#include "GPU_material.h"
+
 #include "NOD_common.h"
 #include "NOD_socket.h"
 
@@ -2299,13 +2303,25 @@ static void rna_NodeSocketStandard_vector_range(PointerRNA *ptr, float *min, flo
        *softmax = dval->max;
 }
 
+static void rna_NodeSocket_value_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+       bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+       if (ntree->type == NTREE_SHADER) {
+               DEG_id_tag_update_ex(bmain, ptr->id.data, DEG_TAG_SHADING_UPDATE);
+               WM_main_add_notifier(NC_MATERIAL | ND_SHADING, NULL);
+       }
+       else {
+               rna_NodeSocket_update(bmain, scene, ptr);
+       }
+}
+
 /* using a context update function here, to avoid searching the node if possible */
 static void rna_NodeSocketStandard_value_update(struct bContext *C, PointerRNA *ptr)
 {
        bNode *node;
        
        /* default update */
-       rna_NodeSocket_update(CTX_data_main(C), CTX_data_scene(C), ptr);
+       rna_NodeSocket_value_update(CTX_data_main(C), CTX_data_scene(C), ptr);
        
        /* try to use node from context, faster */
        node = CTX_data_pointer_get(C, "node").data;
@@ -2751,7 +2767,7 @@ static const EnumPropertyItem *rna_Node_image_view_itemf(bContext *UNUSED(C), Po
        return item;
 }
 
-static const EnumPropertyItem *rna_Node_scene_layer_itemf(bContext *UNUSED(C), PointerRNA *ptr,
+static const EnumPropertyItem *rna_Node_view_layer_itemf(bContext *UNUSED(C), PointerRNA *ptr,
                                                     PropertyRNA *UNUSED(prop), bool *r_free)
 {
        bNode *node = (bNode *)ptr->data;
@@ -2764,7 +2780,7 @@ static const EnumPropertyItem *rna_Node_scene_layer_itemf(bContext *UNUSED(C), P
                return DummyRNA_NULL_items;
        }
 
-       rl = sce->r.layers.first;
+       rl = sce->view_layers.first;
        item = renderresult_layers_add_enum(rl);
 
        *r_free = true;
@@ -2772,7 +2788,7 @@ static const EnumPropertyItem *rna_Node_scene_layer_itemf(bContext *UNUSED(C), P
        return item;
 }
 
-static void rna_Node_scene_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_Node_view_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
        rna_Node_update(bmain, scene, ptr);
        if (scene->nodetree != NULL) {
@@ -3012,7 +3028,7 @@ static void rna_ShaderNodeScript_update(Main *bmain, Scene *scene, PointerRNA *p
 {
        bNodeTree *ntree = (bNodeTree *)ptr->id.data;
        bNode *node = (bNode *)ptr->data;
-       RenderEngineType *engine_type = RE_engines_find(scene->r.engine);
+       RenderEngineType *engine_type = RE_engines_find(scene->view_render.engine_id);
 
        if (engine_type && engine_type->update_script_node) {
                /* auto update node */
@@ -3113,6 +3129,7 @@ static int point_density_vertex_color_source_from_shader(NodeShaderTexPointDensi
 
 void rna_ShaderNodePointDensity_density_cache(bNode *self,
                                               Scene *scene,
+                                              ViewLayer *view_layer,
                                               int settings)
 {
        NodeShaderTexPointDensity *shader_point_density = self->storage;
@@ -3150,12 +3167,13 @@ void rna_ShaderNodePointDensity_density_cache(bNode *self,
 
        /* Single-threaded sampling of the voxel domain. */
        RE_point_density_cache(scene,
-                              pd,
+                              view_layer, pd,
                               settings == 1);
 }
 
 void rna_ShaderNodePointDensity_density_calc(bNode *self,
                                              Scene *scene,
+                                             ViewLayer *view_layer,
                                              int settings,
                                              int *length,
                                              float **values)
@@ -3177,7 +3195,7 @@ void rna_ShaderNodePointDensity_density_calc(bNode *self,
        }
 
        /* Single-threaded sampling of the voxel domain. */
-       RE_point_density_sample(scene, pd,
+       RE_point_density_sample(scene, view_layer, pd,
                                resolution,
                                settings == 1,
                                *values);
@@ -3190,6 +3208,7 @@ void rna_ShaderNodePointDensity_density_calc(bNode *self,
 
 void rna_ShaderNodePointDensity_density_minmax(bNode *self,
                                                Scene *scene,
+                                               ViewLayer *view_layer,
                                                int settings,
                                                float r_min[3],
                                                float r_max[3])
@@ -3201,7 +3220,7 @@ void rna_ShaderNodePointDensity_density_minmax(bNode *self,
                zero_v3(r_max);
                return;
        }
-       RE_point_density_minmax(scene, pd, settings == 1, r_min, r_max);
+       RE_point_density_minmax(scene, view_layer, pd, settings == 1, r_min, r_max);
 }
 
 #else
@@ -3216,7 +3235,7 @@ static const EnumPropertyItem prop_image_view_items[] = {
        {0, NULL, 0, NULL, NULL}
 };
 
-static const EnumPropertyItem prop_scene_layer_items[] = {
+static const EnumPropertyItem prop_view_layer_items[] = {
        { 0, "PLACEHOLDER",          0, "Placeholder",          ""},
        {0, NULL, 0, NULL, NULL}
 };
@@ -4185,11 +4204,13 @@ static void def_sh_tex_pointdensity(StructRNA *srna)
        func = RNA_def_function(srna, "cache_point_density", "rna_ShaderNodePointDensity_density_cache");
        RNA_def_function_ui_description(func, "Cache point density data for later calculation");
        RNA_def_pointer(func, "scene", "Scene", "", "");
+       RNA_def_pointer(func, "view_layer", "ViewLayer", "", "");
        RNA_def_enum(func, "settings", calc_mode_items, 1, "", "Calculate density for rendering");
 
        func = RNA_def_function(srna, "calc_point_density", "rna_ShaderNodePointDensity_density_calc");
        RNA_def_function_ui_description(func, "Calculate point density");
        RNA_def_pointer(func, "scene", "Scene", "", "");
+       RNA_def_pointer(func, "view_layer", "ViewLayer", "", "");
        RNA_def_enum(func, "settings", calc_mode_items, 1, "", "Calculate density for rendering");
        /* TODO, See how array size of 0 works, this shouldnt be used. */
        parm = RNA_def_float_array(func, "rgba_values", 1, NULL, 0, 0, "", "RGBA Values", 0, 0);
@@ -4199,6 +4220,7 @@ static void def_sh_tex_pointdensity(StructRNA *srna)
        func = RNA_def_function(srna, "calc_point_density_minmax", "rna_ShaderNodePointDensity_density_minmax");
        RNA_def_function_ui_description(func, "Calculate point density");
        RNA_def_pointer(func, "scene", "Scene", "", "");
+       RNA_def_pointer(func, "view_layer", "ViewLayer", "", "");
        RNA_def_enum(func, "settings", calc_mode_items, 1, "", "Calculate density for rendering");
        parm = RNA_def_property(func, "min", PROP_FLOAT, PROP_COORDS);
        RNA_def_property_array(parm, 3);
@@ -4835,15 +4857,15 @@ static void def_cmp_render_layers(StructRNA *srna)
        RNA_def_property_struct_type(prop, "Scene");
        RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
        RNA_def_property_ui_text(prop, "Scene", "");
-       RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_scene_layer_update");
+       RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_view_layer_update");
        
        prop = RNA_def_property(srna, "layer", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "custom1");
-       RNA_def_property_enum_items(prop, prop_scene_layer_items);
-       RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Node_scene_layer_itemf");
+       RNA_def_property_enum_items(prop, prop_view_layer_items);
+       RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Node_view_layer_itemf");
        RNA_def_property_flag(prop, PROP_ENUM_NO_TRANSLATE);
        RNA_def_property_ui_text(prop, "Layer", "");
-       RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_scene_layer_update");
+       RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_view_layer_update");
 }
 
 static void rna_def_cmp_output_file_slot_file(BlenderRNA *brna)