88 void set(
const float f)
254#define SHADER_NODE_CLASS(type) \
257 ShaderNode *clone(ShaderGraph *graph) const override \
259 return graph->create_node<type>(*this); \
261 void compile(SVMCompiler &compiler) override; \
262 void compile(OSLCompiler &compiler) override;
264#define SHADER_NODE_NO_CLONE_CLASS(type) \
267 void compile(SVMCompiler &compiler) override; \
268 void compile(OSLCompiler &compiler) override;
270#define SHADER_NODE_BASE_CLASS(type) \
271 ShaderNode *clone(ShaderGraph *graph) const override \
273 return graph->create_node<type>(*this); \
275 void compile(SVMCompiler &compiler) override; \
276 void compile(OSLCompiler &compiler) override;
282 return n1->
id < n2->
id;
287using ShaderNodeMap = map<ShaderNode *, ShaderNode *, ShaderNodeIDComparator>;
317 void finalize(
Scene *scene,
bool do_bump =
false,
bool bump_in_object_space =
false);
327 T *node_ptr = node.get();
335 T *node_ptr =
new (node_memory)
T(args...);
346 ShaderNode *shader_node_ptr = shader_node.get();
347 this->
add_node(std::move(shader_node));
348 return shader_node_ptr;
352 using NodePair = pair<ShaderNode *const, ShaderNode *>;
void find_dependencies(ShaderNodeSet &dependencies, ShaderInput *input)
unique_ptr_vector< ShaderNode > nodes
void verify_volume_output()
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 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 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)
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)
virtual int get_feature()
virtual bool has_attribute_dependency()
virtual void constant_fold(const ConstantFolder &)
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_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())