128 graph->connect(new_output, sock);
158 else if (!input->
link) {
175 if (other != input && other->
link) {
176 graph->disconnect(other);
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) {
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)) {
@ 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
ShaderOutput *const output
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 blender::bke::bNodeSocketTemplate outputs[]
static bool is_float3(Type type)
ccl_device_inline int clamp(int a, int mn, int mx)