~ubuntu-branches/ubuntu/trusty/blender/trusty

« back to all changes in this revision

Viewing changes to intern/cycles/render/graph.h

  • Committer: Package Import Robot
  • Author(s): Jeremy Bicha
  • Date: 2013-03-06 12:08:47 UTC
  • mfrom: (1.5.1) (14.1.8 experimental)
  • Revision ID: package-import@ubuntu.com-20130306120847-frjfaryb2zrotwcg
Tags: 2.66a-1ubuntu1
* Resynchronize with Debian (LP: #1076930, #1089256, #1052743, #999024,
  #1122888, #1147084)
* debian/control:
  - Lower build-depends on libavcodec-dev since we're not
    doing the libav9 transition in Ubuntu yet

Show diffs side-by-side

added added

removed removed

Lines of Context:
44
44
 
45
45
enum ShaderSocketType {
46
46
        SHADER_SOCKET_FLOAT,
 
47
        SHADER_SOCKET_INT,
47
48
        SHADER_SOCKET_COLOR,
48
49
        SHADER_SOCKET_VECTOR,
49
50
        SHADER_SOCKET_POINT,
50
51
        SHADER_SOCKET_NORMAL,
51
 
        SHADER_SOCKET_CLOSURE
 
52
        SHADER_SOCKET_CLOSURE,
 
53
        SHADER_SOCKET_STRING
52
54
};
53
55
 
54
56
/* Bump
63
65
        SHADER_BUMP_DY
64
66
};
65
67
 
 
68
/* Identifiers for some special node types.
 
69
 *
 
70
 * The graph needs to identify these in the clean function.
 
71
 * Cannot use dynamic_cast, as this is disabled for OSL. */
 
72
 
 
73
enum ShaderNodeSpecialType {
 
74
        SHADER_SPECIAL_TYPE_NONE,
 
75
        SHADER_SPECIAL_TYPE_PROXY,
 
76
        SHADER_SPECIAL_TYPE_MIX_CLOSURE
 
77
};
 
78
 
66
79
/* Enum
67
80
 *
68
81
 * Utility class for enum values. */
101
114
                INCOMING,
102
115
                NORMAL,
103
116
                POSITION,
 
117
                TANGENT,
104
118
                NONE
105
119
        };
106
120
 
 
121
        enum Usage {
 
122
                USE_SVM = 1,
 
123
                USE_OSL = 2,
 
124
                USE_ALL = USE_SVM|USE_OSL
 
125
        };
 
126
 
107
127
        ShaderInput(ShaderNode *parent, const char *name, ShaderSocketType type);
108
128
        void set(const float3& v) { value = v; }
109
129
        void set(float f) { value = make_float3(f, 0, 0); }
 
130
        void set(const ustring v) { value_string = v; }
110
131
 
111
132
        const char *name;
112
133
        ShaderSocketType type;
116
137
 
117
138
        DefaultValue default_value;
118
139
        float3 value;
 
140
        ustring value_string;
119
141
 
120
142
        int stack_offset; /* for SVM compiler */
121
 
        bool osl_only;
 
143
        int usage;
122
144
};
123
145
 
124
146
/* Output
151
173
        ShaderInput *input(const char *name);
152
174
        ShaderOutput *output(const char *name);
153
175
 
154
 
        ShaderInput *add_input(const char *name, ShaderSocketType type, float value=0.0f);
155
 
        ShaderInput *add_input(const char *name, ShaderSocketType type, float3 value);
156
 
        ShaderInput *add_input(const char *name, ShaderSocketType type, ShaderInput::DefaultValue value, bool osl_only=false);
 
176
        ShaderInput *add_input(const char *name, ShaderSocketType type, float value=0.0f, int usage=ShaderInput::USE_ALL);
 
177
        ShaderInput *add_input(const char *name, ShaderSocketType type, float3 value, int usage=ShaderInput::USE_ALL);
 
178
        ShaderInput *add_input(const char *name, ShaderSocketType type, ShaderInput::DefaultValue value, int usage=ShaderInput::USE_ALL);
157
179
        ShaderOutput *add_output(const char *name, ShaderSocketType type);
158
180
 
159
181
        virtual ShaderNode *clone() const = 0;
161
183
        virtual void compile(SVMCompiler& compiler) = 0;
162
184
        virtual void compile(OSLCompiler& compiler) = 0;
163
185
 
 
186
        virtual bool has_surface_emission() { return false; }
 
187
        virtual bool has_surface_transparent() { return false; }
 
188
 
164
189
        vector<ShaderInput*> inputs;
165
190
        vector<ShaderOutput*> outputs;
166
191
 
167
192
        ustring name; /* name, not required to be unique */
168
193
        int id; /* index in graph node array */
169
194
        ShaderBump bump; /* for bump mapping utility */
 
195
        
 
196
        ShaderNodeSpecialType special_type;     /* special node type */
170
197
};
171
198
 
172
199
 
209
236
        void connect(ShaderOutput *from, ShaderInput *to);
210
237
        void disconnect(ShaderInput *to);
211
238
 
212
 
        void finalize(bool do_bump = false, bool do_osl = false);
 
239
        void finalize(bool do_bump = false, bool do_osl = false, bool do_multi_closure = false);
213
240
 
214
241
protected:
215
242
        typedef pair<ShaderNode* const, ShaderNode*> NodePair;
221
248
        void break_cycles(ShaderNode *node, vector<bool>& visited, vector<bool>& on_stack);
222
249
        void clean();
223
250
        void bump_from_displacement();
 
251
        void refine_bump_nodes();
224
252
        void default_inputs(bool do_osl);
 
253
        void transform_multi_closure(ShaderNode *node, ShaderOutput *weight_out, bool volume);
225
254
};
226
255
 
227
256
CCL_NAMESPACE_END