17 : graph(graph), node(node), output(output), scene(scene)
34 VLOG_DEBUG <<
"Folding " << node->name <<
"::" << output->name() <<
" to constant (" << value
42 graph->disconnect(output);
47 VLOG_DEBUG <<
"Folding " << node->name <<
"::" << output->name() <<
" to constant " << value
55 graph->disconnect(output);
60 VLOG_DEBUG <<
"Folding " << node->name <<
"::" << output->name() <<
" to constant (" << value
68 graph->disconnect(output);
117 VLOG_DEBUG <<
"Folding " << node->name <<
"::" << output->name() <<
" to socket "
125 graph->disconnect(output);
128 graph->connect(new_output, sock);
136 VLOG_DEBUG <<
"Discarding closure " << node->name <<
".";
138 graph->disconnect(output);
155 if (input->type() != output->type()) {
158 else if (!input->link) {
175 if (other != input && other->link) {
176 graph->disconnect(other);
188 return node->get_float(input->socket_type) == 0.0f;
191 return node->get_float3(input->socket_type) ==
zero_float3();
202 return node->get_float(input->socket_type) == 1.0f;
205 return node->get_float3(input->socket_type) ==
one_float3();
221 bool fac_is_zero = !fac_in->
link && fac == 0.0f;
222 bool fac_is_one = !fac_in->
link && fac == 1.0f;
237 if (color1_in->
link && color2_in->
link) {
238 if (color1_in->
link == color2_in->
link) {
243 else if (!color1_in->
link && !color2_in->
link) {
246 if (color1 == color2) {
259 if (
is_zero(color1_in) && fac_is_one) {
273 else if (color1_in->
link && color1_in->
link == color2_in->
link && fac_is_one) {
279 if (
is_one(color1_in) && fac_is_one) {
282 else if (
is_one(color2_in)) {
289 else if (
is_zero(color2_in) && fac_is_one) {
316 bool fac_is_zero = !fac_in->
link && fac == 0.0f;
317 bool fac_is_one = !fac_in->
link && fac == 1.0f;
332 if (color1_in->
link && color2_in->
link) {
333 if (color1_in->
link == color2_in->
link) {
338 else if (!color1_in->
link && !color2_in->
link) {
341 if (color1 == color2) {
354 if (
is_zero(color1_in) && fac_is_one) {
368 else if (color1_in->
link && color1_in->
link == color2_in->
link && fac_is_one) {
374 if (
is_one(color1_in) && fac_is_one) {
377 else if (
is_one(color2_in)) {
384 else if (
is_zero(color2_in) && fac_is_one) {
411 bool fac_is_zero = !fac_in->
link && fac == 0.0f;
412 bool fac_is_one = !fac_in->
link && fac == 1.0f;
422 if (float1_in->
link && float2_in->
link) {
423 if (float1_in->
link == float2_in->
link) {
428 else if (!float1_in->
link && !float2_in->
link) {
429 float value1 = node->get_float(float1_in->
socket_type);
430 float value2 = node->get_float(float2_in->
socket_type);
431 if (value1 == value2) {
469 else if (
is_one(value2_in)) {
493 else if (
is_one(value2_in)) {
513 else if (
is_zero(vector2_in)) {
528 else if (
is_one(vector1_in)) {
531 else if (
is_one(vector2_in)) {
540 else if (
is_one(vector2_in)) {
562 else if (
is_one(scale_in)) {
574 ShaderInput *location_in = node->input(
"Location");
575 ShaderInput *rotation_in = node->input(
"Rotation");
@ NODE_VECTOR_MATH_LENGTH
@ NODE_VECTOR_MATH_CROSS_PRODUCT
@ NODE_VECTOR_MATH_DOT_PRODUCT
@ NODE_VECTOR_MATH_ABSOLUTE
@ NODE_VECTOR_MATH_DIVIDE
@ NODE_VECTOR_MATH_MULTIPLY
@ NODE_VECTOR_MATH_SUBTRACT
@ NODE_MAPPING_TYPE_VECTOR
@ NODE_MAPPING_TYPE_NORMAL
void make_constant_clamp(float value, bool clamp) const
void bypass(ShaderOutput *output) const
void bypass_or_discard(ShaderInput *input) const
void fold_mapping(NodeMappingType type) const
void fold_mix_float(bool clamp_factor, bool clamp) const
bool all_inputs_constant() const
ConstantFolder(ShaderGraph *graph, ShaderNode *node, ShaderOutput *output, Scene *scene)
bool try_bypass_or_make_constant(ShaderInput *input, bool clamp=false) const
bool is_zero(ShaderInput *input) const
bool is_one(ShaderInput *input) const
void fold_math(NodeMathType type) const
void make_constant(float value) const
void fold_mix(NodeMix type, bool clamp) const
void fold_vector_math(NodeVectorMathType type) const
void fold_mix_color(NodeMix type, bool clamp_factor, bool clamp) const
#define CCL_NAMESPACE_END
ccl_device_inline float3 one_float3()
CCL_NAMESPACE_BEGIN ccl_device_inline float3 zero_float3()
static bool is_float3(Type type)