Fix Cycles viewport render not updating when tweaking displacement shader.
[blender.git] / intern / cycles / graph / node.h
1 /*
2  * Copyright 2011-2016 Blender Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #pragma once
18
19 #include "graph/node_type.h"
20
21 #include "util/util_map.h"
22 #include "util/util_param.h"
23 #include "util/util_vector.h"
24
25 CCL_NAMESPACE_BEGIN
26
27 class MD5Hash;
28 struct Node;
29 struct NodeType;
30 struct Transform;
31
32 /* Node */
33
34 struct Node
35 {
36         explicit Node(const NodeType *type, ustring name = ustring());
37         virtual ~Node();
38
39         /* set values */
40         void set(const SocketType& input, bool value);
41         void set(const SocketType& input, int value);
42         void set(const SocketType& input, uint value);
43         void set(const SocketType& input, float value);
44         void set(const SocketType& input, float2 value);
45         void set(const SocketType& input, float3 value);
46         void set(const SocketType& input, const char *value);
47         void set(const SocketType& input, ustring value);
48         void set(const SocketType& input, const Transform& value);
49         void set(const SocketType& input, Node *value);
50
51         /* set array values. the memory from the input array will taken over
52          * by the node and the input array will be empty after return */
53         void set(const SocketType& input, array<bool>& value);
54         void set(const SocketType& input, array<int>& value);
55         void set(const SocketType& input, array<float>& value);
56         void set(const SocketType& input, array<float2>& value);
57         void set(const SocketType& input, array<float3>& value);
58         void set(const SocketType& input, array<ustring>& value);
59         void set(const SocketType& input, array<Transform>& value);
60         void set(const SocketType& input, array<Node*>& value);
61
62         /* get values */
63         bool get_bool(const SocketType& input) const;
64         int get_int(const SocketType& input) const;
65         uint get_uint(const SocketType& input) const;
66         float get_float(const SocketType& input) const;
67         float2 get_float2(const SocketType& input) const;
68         float3 get_float3(const SocketType& input) const;
69         ustring get_string(const SocketType& input) const;
70         Transform get_transform(const SocketType& input) const;
71         Node *get_node(const SocketType& input) const;
72
73         /* get array values */
74         const array<bool>& get_bool_array(const SocketType& input) const;
75         const array<int>& get_int_array(const SocketType& input) const;
76         const array<float>& get_float_array(const SocketType& input) const;
77         const array<float2>& get_float2_array(const SocketType& input) const;
78         const array<float3>& get_float3_array(const SocketType& input) const;
79         const array<ustring>& get_string_array(const SocketType& input) const;
80         const array<Transform>& get_transform_array(const SocketType& input) const;
81         const array<Node*>& get_node_array(const SocketType& input) const;
82
83         /* generic values operations */
84         bool has_default_value(const SocketType& input) const;
85         void set_default_value(const SocketType& input);
86         bool equals_value(const Node& other, const SocketType& input) const;
87         void copy_value(const SocketType& input, const Node& other, const SocketType& other_input);
88
89         /* equals */
90         bool equals(const Node& other) const;
91
92         /* compute hash of node and its socket values */
93         void hash(MD5Hash& md5);
94
95         ustring name;
96         const NodeType *type;
97 };
98
99 CCL_NAMESPACE_END
100