257 #define SHADER_NODE_CLASS(type) \
260 virtual ShaderNode *clone(ShaderGraph *graph) const \
262 return graph->create_node<type>(*this); \
264 virtual void compile(SVMCompiler &compiler); \
265 virtual void compile(OSLCompiler &compiler);
267 #define SHADER_NODE_NO_CLONE_CLASS(type) \
270 virtual void compile(SVMCompiler &compiler); \
271 virtual void compile(OSLCompiler &compiler);
273 #define SHADER_NODE_BASE_CLASS(type) \
274 virtual ShaderNode *clone(ShaderGraph *graph) const \
276 return graph->create_node<type>(*this); \
278 virtual void compile(SVMCompiler &compiler); \
279 virtual void compile(OSLCompiler &compiler);
285 return n1->
id < n2->
id;
290 typedef map<ShaderNode *, ShaderNode *, ShaderNodeIDComparator>
ShaderNodeMap;
322 bool do_bump =
false,
323 bool do_simplify =
false,
324 bool bump_in_object_space =
false);
336 node->set_owner(
this);
344 assert(
node->get_owner() ==
this);
349 typedef pair<ShaderNode *const, ShaderNode *>
NodePair;
void find_dependencies(ShaderNodeSet &dependencies, ShaderInput *input)
list< ShaderNode * > nodes
void verify_volume_output()
void simplify(Scene *scene)
void disconnect(ShaderOutput *from)
void delete_node(T *node)
void break_cycles(ShaderNode *node, vector< bool > &visited, vector< bool > &on_stack)
void copy_nodes(ShaderNodeSet &nodes, ShaderNodeMap &nnodemap)
pair< ShaderNode *const, ShaderNode * > NodePair
void compute_displacement_hash()
void default_inputs(bool do_osl)
void connect(ShaderOutput *from, ShaderInput *to)
void relink(ShaderInput *from, ShaderInput *to)
T * create_node(Args &&...args)
void constant_fold(Scene *scene)
void transform_multi_closure(ShaderNode *node, ShaderOutput *weight_out, bool volume)
void remove_proxy_nodes()
void simplify_settings(Scene *scene)
void bump_from_displacement(bool use_object_space)
void finalize(Scene *scene, bool do_bump=false, bool do_simplify=false, bool bump_in_object_space=false)
ShaderNode * add(ShaderNode *node)
void dump_graph(const char *filename)
bool operator()(const ShaderNode *n1, const ShaderNode *n2) const
virtual ShaderNode * clone(ShaderGraph *graph) const =0
ShaderInput * input(const char *name)
virtual bool has_surface_transparent()
vector< ShaderOutput * > outputs
virtual bool has_surface_emission()
void remove_input(ShaderInput *input)
ShaderNodeSpecialType special_type
virtual void simplify_settings(Scene *)
virtual bool has_bssrdf_bump()
virtual bool has_spatial_varying()
vector< ShaderInput * > inputs
virtual bool has_volume_support()
virtual ClosureType get_closure_type()
virtual bool equals(const ShaderNode &other)
virtual int get_feature()
virtual bool has_attribute_dependency()
virtual void constant_fold(const ConstantFolder &)
virtual void expand(ShaderGraph *)
virtual bool has_integrator_dependency()
ShaderNode(const NodeType *type)
void create_inputs_outputs(const NodeType *type)
ShaderOutput * output(const char *name)
virtual bool has_surface_bssrdf()
virtual void compile(OSLCompiler &compiler)=0
virtual void compile(SVMCompiler &compiler)=0
virtual void attributes(Shader *shader, AttributeRequestSet *attributes)
vector< ShaderInput * > links
ShaderOutput(const SocketType &socket_type_, ShaderNode *parent_)
const SocketType & socket_type
#define CCL_NAMESPACE_END
Set< ComponentNode * > visited
ccl_global KernelShaderEvalInput * input
#define SVM_STACK_INVALID
@ KERNEL_FEATURE_NODE_BUMP
@ SHADER_SPECIAL_TYPE_PROXY
@ SHADER_SPECIAL_TYPE_IMAGE_SLOT
@ SHADER_SPECIAL_TYPE_GEOMETRY
@ SHADER_SPECIAL_TYPE_OUTPUT_AOV
@ SHADER_SPECIAL_TYPE_COMBINE_CLOSURE
@ SHADER_SPECIAL_TYPE_BUMP
@ SHADER_SPECIAL_TYPE_AUTOCONVERT
@ SHADER_SPECIAL_TYPE_NONE
@ SHADER_SPECIAL_TYPE_OUTPUT
@ SHADER_SPECIAL_TYPE_CLOSURE
@ SHADER_SPECIAL_TYPE_OSL
set< ShaderNode *, ShaderNodeIDComparator > ShaderNodeSet
map< ShaderNode *, ShaderNode *, ShaderNodeIDComparator > ShaderNodeMap