89 void set(
const float f)
266#define SHADER_NODE_CLASS(type) \
269 ShaderNode *clone(ShaderGraph *graph) const override \
271 return graph->create_node<type>(*this); \
273 void compile(SVMCompiler &compiler) override; \
274 void compile(OSLCompiler &compiler) override;
276#define SHADER_NODE_NO_CLONE_CLASS(type) \
279 void compile(SVMCompiler &compiler) override; \
280 void compile(OSLCompiler &compiler) override;
282#define SHADER_NODE_BASE_CLASS(type) \
283 ShaderNode *clone(ShaderGraph *graph) const override \
285 return graph->create_node<type>(*this); \
287 void compile(SVMCompiler &compiler) override; \
288 void compile(OSLCompiler &compiler) override;
294 return n1->
id < n2->
id;
301 const std::pair<ShaderNode *, bool> p2)
const
303 return p1.first->id < p2.first->id || (p1.first->id == p2.first->id && p1.second < p2.second);
308using ShaderNodeMap = map<ShaderNode *, ShaderNode *, ShaderNodeIDComparator>;
338 void finalize(
Scene *scene,
bool do_bump =
false,
bool bump_in_object_space =
false);
348 T *node_ptr = node.get();
356 T *node_ptr =
new (node_memory)
T(args...);
367 ShaderNode *shader_node_ptr = shader_node.get();
368 this->
add_node(std::move(shader_node));
369 return shader_node_ptr;
373 using NodePair = pair<ShaderNode *const, ShaderNode *>;
void find_dependencies(ShaderNodeSet &dependencies, ShaderInput *input)
unique_ptr_vector< ShaderNode > nodes
void simplify(Scene *scene)
T * create_node(Args &&...args)
void add_node(unique_ptr< ShaderNode > &&node)
void disconnect(ShaderOutput *from)
void break_cycles(ShaderNode *node, vector< bool > &visited, vector< bool > &on_stack)
void copy_nodes(ShaderNodeSet &nodes, ShaderNodeMap &nnodemap)
void finalize(Scene *scene, bool do_bump=false, bool bump_in_object_space=false)
void compute_displacement_hash()
void default_inputs(bool do_osl)
ShaderNode * create_node(const NodeType *node_type)
void connect(ShaderOutput *from, ShaderInput *to)
void relink(ShaderInput *from, ShaderInput *to)
T * create_osl_node(void *node_memory, Args &&...args)
void optimize_volume_output()
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)
pair< ShaderNode *const, ShaderNode * > NodePair
void dump_graph(const char *filename)
bool operator()(const std::pair< ShaderNode *, bool > p1, const std::pair< ShaderNode *, bool > p2) const
bool operator()(const ShaderNode *n1, const ShaderNode *n2) const
ShaderInput * input(const char *name)
virtual bool has_surface_transparent()
virtual bool has_surface_emission()
void remove_input(ShaderInput *input)
virtual uint get_feature()
ShaderNodeSpecialType special_type
virtual void simplify_settings(Scene *)
virtual bool has_bssrdf_bump()
virtual bool has_spatial_varying()
virtual bool has_volume_support()
virtual ClosureType get_closure_type()
virtual ShaderNode * clone(ShaderGraph *graph) const =0
virtual bool equals(const ShaderNode &other)
void disconnect_unused_input(const char *name)
virtual bool has_attribute_dependency()
virtual void constant_fold(const ConstantFolder &)
virtual bool is_linear_operation()
virtual void expand(ShaderGraph *)
ShaderNode(const NodeType *type)
void create_inputs_outputs(const NodeType *type)
unique_ptr_vector< ShaderInput > inputs
virtual bool has_surface_bssrdf()
virtual void compile(OSLCompiler &compiler)=0
virtual void compile(SVMCompiler &compiler)=0
virtual void attributes(Shader *shader, AttributeRequestSet *attributes)
unique_ptr_vector< ShaderOutput > outputs
vector< ShaderInput * > links
ShaderOutput(const SocketType &socket_type_, ShaderNode *parent_)
const SocketType & socket_type
SocketType::Type type() const
#define SVM_STACK_INVALID
#define KERNEL_FEATURE_NODE_BUMP
#define CCL_NAMESPACE_END
@ SHADER_SPECIAL_TYPE_LIGHT_PATH
@ 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
Node(const NodeType *type, ustring name=ustring())