5#include "testing/mock_log.h"
6#include "testing/testing.h"
22using testing::AnyNumber;
23using testing::HasSubstr;
24using testing::ScopedMockLog;
34 node_ = graph.create_node<T>();
50 ShaderInput *input_socket = node_->input(input_name.c_str());
51 EXPECT_NE((
void *)
NULL, input_socket);
52 input_socket->
set(value);
58 const SocketType *input_socket = node_->
type->find_input(ustring(input_name.c_str()));
59 EXPECT_NE((
void *)
NULL, input_socket);
60 node_->set(*input_socket, value);
73 node_map_[
"Output"] = graph->output();
78 map<string, ShaderNode *>::iterator it = node_map_.find(name);
79 if (it == node_map_.end()) {
88 graph_->add(node.node());
89 node_map_[node.name()] = node.node();
100 ShaderNode *node_from = find_node(tokens_from[0]), *node_to = find_node(tokens_to[0]);
101 EXPECT_NE((
void *)
NULL, node_from);
102 EXPECT_NE((
void *)
NULL, node_to);
103 EXPECT_NE(node_from, node_to);
105 ShaderInput *socket_to = node_to->input(tokens_to[1].c_str());
106 EXPECT_NE((
void *)
NULL, socket_from);
107 EXPECT_NE((
void *)
NULL, socket_to);
108 graph_->connect(socket_from, socket_to);
196#define EXPECT_ANY_MESSAGE(log) EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber());
198#define CORRECT_INFO_MESSAGE(log, message) \
199 EXPECT_CALL(log, Log(google::INFO, _, HasSubstr(message)));
201#define INVALID_INFO_MESSAGE(log, message) \
202 EXPECT_CALL(log, Log(google::INFO, _, HasSubstr(message))).Times(0);
214 builder.add_node(ShaderNodeBuilder<GeometryNode>(graph,
"Geometry1"))
215 .add_node(ShaderNodeBuilder<GeometryNode>(graph,
"Geometry2"))
216 .add_node(ShaderNodeBuilder<ValueNode>(graph,
"Value1").set_param(
"value", 0.8f))
217 .add_node(ShaderNodeBuilder<ValueNode>(graph,
"Value2").set_param(
"value", 0.8f))
218 .add_node(ShaderNodeBuilder<NoiseTextureNode>(graph,
"Noise1"))
219 .add_node(ShaderNodeBuilder<NoiseTextureNode>(graph,
"Noise2"))
220 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix")
223 .add_connection(
"Geometry1::Parametric",
"Noise1::Vector")
224 .add_connection(
"Value1::Value",
"Noise1::Scale")
225 .add_connection(
"Noise1::Color",
"Mix::Color1")
226 .add_connection(
"Geometry2::Parametric",
"Noise2::Vector")
227 .add_connection(
"Value2::Value",
"Noise2::Scale")
228 .add_connection(
"Noise2::Color",
"Mix::Color2")
229 .output_color(
"Mix::Color");
231 graph.finalize(scene);
244 "Folding convert_float_to_color::value_color to constant (0.8, 0.8, 0.8).");
247 .add_node(ShaderNodeBuilder<RGBToBWNode>(graph,
"RGBToBWNodeNode")
249 .output_color(
"RGBToBWNodeNode::Val");
251 graph.finalize(scene);
263 builder.add_node(ShaderNodeBuilder<EmissionNode>(graph,
"Emission").
set(
"Color",
zero_float3()))
264 .output_closure(
"Emission::Emission");
266 graph.finalize(scene);
274 builder.add_node(ShaderNodeBuilder<EmissionNode>(graph,
"Emission").
set(
"Strength", 0.0f))
275 .output_closure(
"Emission::Emission");
277 graph.finalize(scene);
290 .add_node(ShaderNodeBuilder<BackgroundNode>(graph,
"Background").
set(
"Color",
zero_float3()))
291 .output_closure(
"Background::Background");
293 graph.finalize(scene);
301 builder.add_node(ShaderNodeBuilder<BackgroundNode>(graph,
"Background").
set(
"Strength", 0.0f))
302 .output_closure(
"Background::Background");
304 graph.finalize(scene);
318 builder.add_node(ShaderNodeBuilder<DiffuseBsdfNode>(graph,
"Diffuse"))
319 .add_node(ShaderNodeBuilder<AddClosureNode>(graph,
"AddClosure1"))
320 .add_node(ShaderNodeBuilder<AddClosureNode>(graph,
"AddClosure2"))
321 .add_node(ShaderNodeBuilder<AddClosureNode>(graph,
"AddClosure3"))
322 .add_connection(
"Diffuse::BSDF",
"AddClosure1::Closure1")
323 .add_connection(
"Diffuse::BSDF",
"AddClosure2::Closure2")
324 .add_connection(
"AddClosure1::Closure",
"AddClosure3::Closure1")
325 .add_connection(
"AddClosure2::Closure",
"AddClosure3::Closure2")
326 .output_closure(
"AddClosure3::Closure");
328 graph.finalize(scene);
343 builder.add_attribute(
"Attribute")
344 .add_node(ShaderNodeBuilder<DiffuseBsdfNode>(graph,
"Diffuse"))
346 .add_node(ShaderNodeBuilder<MixClosureNode>(graph,
"MixClosure1").
set(
"Fac", 0.0f))
347 .add_connection(
"Diffuse::BSDF",
"MixClosure1::Closure1")
349 .add_node(ShaderNodeBuilder<MixClosureNode>(graph,
"MixClosure2").
set(
"Fac", 1.0f))
350 .add_connection(
"Diffuse::BSDF",
"MixClosure2::Closure2")
352 .add_node(ShaderNodeBuilder<MixClosureNode>(graph,
"MixClosure3"))
353 .add_connection(
"Attribute::Fac",
"MixClosure3::Fac")
354 .add_connection(
"MixClosure1::Closure",
"MixClosure3::Closure1")
355 .add_connection(
"MixClosure2::Closure",
"MixClosure3::Closure2")
356 .output_closure(
"MixClosure3::Closure");
358 graph.finalize(scene);
371 .add_node(ShaderNodeBuilder<InvertNode>(graph,
"Invert")
374 .output_color(
"Invert::Color");
376 graph.finalize(scene);
388 builder.add_attribute(
"Attribute")
389 .add_node(ShaderNodeBuilder<InvertNode>(graph,
"Invert").
set(
"Fac", 0.0f))
390 .add_connection(
"Attribute::Color",
"Invert::Color")
391 .output_color(
"Invert::Color");
393 graph.finalize(scene);
406 .add_node(ShaderNodeBuilder<InvertNode>(graph,
"Invert")
409 .output_color(
"Invert::Color");
411 graph.finalize(scene);
424 .add_node(ShaderNodeBuilder<MixNode>(graph,
"MixAdd")
426 .set_param(
"use_clamp",
false)
430 .output_color(
"MixAdd::Color");
432 graph.finalize(scene);
445 .add_node(ShaderNodeBuilder<MixNode>(graph,
"MixAdd")
447 .set_param(
"use_clamp",
true)
451 .output_color(
"MixAdd::Color");
453 graph.finalize(scene);
465 builder.add_attribute(
"Attribute1")
466 .add_attribute(
"Attribute2")
467 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix")
469 .set_param(
"use_clamp",
false)
471 .add_connection(
"Attribute1::Color",
"Mix::Color1")
472 .add_connection(
"Attribute2::Color",
"Mix::Color2")
473 .output_color(
"Mix::Color");
475 graph.finalize(scene);
487 builder.add_attribute(
"Attribute1")
488 .add_attribute(
"Attribute2")
489 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix")
491 .set_param(
"use_clamp",
false)
493 .add_connection(
"Attribute1::Color",
"Mix::Color1")
494 .add_connection(
"Attribute2::Color",
"Mix::Color2")
495 .output_color(
"Mix::Color");
497 graph.finalize(scene);
509 builder.add_attribute(
"Attribute1")
510 .add_attribute(
"Attribute2")
511 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix")
513 .set_param(
"use_clamp",
false)
515 .add_connection(
"Attribute1::Color",
"Mix::Color1")
516 .add_connection(
"Attribute2::Color",
"Mix::Color2")
517 .output_color(
"Mix::Color");
519 graph.finalize(scene);
531 builder.add_attribute(
"Attribute1")
532 .add_attribute(
"Attribute2")
533 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix")
535 .set_param(
"use_clamp",
true)
537 .add_connection(
"Attribute1::Color",
"Mix::Color1")
538 .add_connection(
"Attribute2::Color",
"Mix::Color2")
539 .output_color(
"Mix::Color");
541 graph.finalize(scene);
556 builder.add_attribute(
"Attribute1")
557 .add_attribute(
"Attribute2")
559 .add_node(ShaderNodeBuilder<MixNode>(graph,
"MixBlend1")
561 .set_param(
"use_clamp",
false)
563 .add_connection(
"Attribute1::Color",
"MixBlend1::Color1")
564 .add_connection(
"Attribute2::Color",
"MixBlend1::Color2")
566 .add_node(ShaderNodeBuilder<MixNode>(graph,
"MixBlend2")
568 .set_param(
"use_clamp",
false)
570 .add_connection(
"Attribute1::Color",
"MixBlend2::Color2")
571 .add_connection(
"Attribute2::Color",
"MixBlend2::Color1")
573 .add_node(ShaderNodeBuilder<MixNode>(graph,
"MixBlend3")
575 .set_param(
"use_clamp",
false))
576 .add_connection(
"Attribute1::Fac",
"MixBlend3::Fac")
577 .add_connection(
"MixBlend1::Color",
"MixBlend3::Color1")
578 .add_connection(
"MixBlend2::Color",
"MixBlend3::Color2")
579 .output_color(
"MixBlend3::Color");
581 graph.finalize(scene);
593 builder.add_attribute(
"Attribute")
594 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix")
596 .set_param(
"use_clamp",
true)
598 .add_connection(
"Attribute::Color",
"Mix::Color1")
599 .add_connection(
"Attribute::Color",
"Mix::Color2")
600 .output_color(
"Mix::Color");
602 graph.finalize(scene);
614 builder.add_attribute(
"Attribute")
615 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix")
617 .set_param(
"use_clamp",
true)
619 .add_connection(
"Attribute::Color",
"Mix::Color1")
620 .add_connection(
"Attribute::Color",
"Mix::Color2")
621 .output_color(
"Mix::Color");
623 graph.finalize(scene);
635 .add_attribute(
"Attribute")
637 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Mix_Cx_Fx")
638 .set_param(
"mix_type", type)
639 .set_param(
"use_clamp",
false)
640 .set(
"Color1", constval))
641 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Mix_Cx_F1")
642 .set_param(
"mix_type", type)
643 .set_param(
"use_clamp",
false)
644 .set(
"Color1", constval)
646 .add_connection(
"Attribute::Fac",
"Mix_Cx_Fx::Fac")
647 .add_connection(
"Attribute::Color",
"Mix_Cx_Fx::Color2")
648 .add_connection(
"Attribute::Color",
"Mix_Cx_F1::Color2")
650 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Mix_xC_Fx")
651 .set_param(
"mix_type", type)
652 .set_param(
"use_clamp",
false)
653 .set(
"Color2", constval))
654 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Mix_xC_F1")
655 .set_param(
"mix_type", type)
656 .set_param(
"use_clamp",
false)
657 .set(
"Color2", constval)
659 .add_connection(
"Attribute::Fac",
"Mix_xC_Fx::Fac")
660 .add_connection(
"Attribute::Color",
"Mix_xC_Fx::Color1")
661 .add_connection(
"Attribute::Color",
"Mix_xC_F1::Color1")
663 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Out12")
665 .set_param(
"use_clamp",
true)
667 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Out34")
669 .set_param(
"use_clamp",
true)
671 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Out1234")
673 .set_param(
"use_clamp",
true)
675 .add_connection(
"Mix_Cx_Fx::Color",
"Out12::Color1")
676 .add_connection(
"Mix_Cx_F1::Color",
"Out12::Color2")
677 .add_connection(
"Mix_xC_Fx::Color",
"Out34::Color1")
678 .add_connection(
"Mix_xC_F1::Color",
"Out34::Color2")
679 .add_connection(
"Out12::Color",
"Out1234::Color1")
680 .add_connection(
"Out34::Color",
"Out1234::Color2")
681 .output_color(
"Out1234::Color");
699 graph.finalize(scene);
716 graph.finalize(scene);
734 graph.finalize(scene);
751 graph.finalize(scene);
771 graph.finalize(scene);
790 graph.finalize(scene);
805 .add_node(ShaderNodeBuilder<SeparateRGBNode>(graph,
"SeparateRGB")
807 .add_node(ShaderNodeBuilder<CombineRGBNode>(graph,
"CombineRGB"))
808 .add_connection(
"SeparateRGB::R",
"CombineRGB::R")
809 .add_connection(
"SeparateRGB::G",
"CombineRGB::G")
810 .add_connection(
"SeparateRGB::B",
"CombineRGB::B")
811 .output_color(
"CombineRGB::Image");
813 graph.finalize(scene);
827 log,
"Folding convert_vector_to_color::value_color to constant (0.3, 0.5, 0.7).");
830 .add_node(ShaderNodeBuilder<SeparateXYZNode>(graph,
"SeparateXYZ")
832 .add_node(ShaderNodeBuilder<CombineXYZNode>(graph,
"CombineXYZ"))
833 .add_connection(
"SeparateXYZ::X",
"CombineXYZ::X")
834 .add_connection(
"SeparateXYZ::Y",
"CombineXYZ::Y")
835 .add_connection(
"SeparateXYZ::Z",
"CombineXYZ::Z")
836 .output_color(
"CombineXYZ::Vector");
838 graph.finalize(scene);
853 .add_node(ShaderNodeBuilder<SeparateHSVNode>(graph,
"SeparateHSV")
855 .add_node(ShaderNodeBuilder<CombineHSVNode>(graph,
"CombineHSV"))
856 .add_connection(
"SeparateHSV::H",
"CombineHSV::H")
857 .add_connection(
"SeparateHSV::S",
"CombineHSV::S")
858 .add_connection(
"SeparateHSV::V",
"CombineHSV::V")
859 .output_color(
"CombineHSV::Color");
861 graph.finalize(scene);
873 .add_node(ShaderNodeBuilder<GammaNode>(graph,
"Gamma")
876 .output_color(
"Gamma::Color");
878 graph.finalize(scene);
891 .add_attribute(
"Attribute")
893 .add_node(ShaderNodeBuilder<GammaNode>(graph,
"Gamma_Cx").
set(
"Color",
zero_float3()))
894 .add_connection(
"Attribute::Fac",
"Gamma_Cx::Gamma")
896 .add_node(ShaderNodeBuilder<GammaNode>(graph,
"Gamma_xC").
set(
"Gamma", 0.0f))
897 .add_connection(
"Attribute::Color",
"Gamma_xC::Color")
899 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Out")
901 .set_param(
"use_clamp",
true)
903 .add_connection(
"Gamma_Cx::Color",
"Out::Color1")
904 .add_connection(
"Gamma_xC::Color",
"Out::Color2")
905 .output_color(
"Out::Color");
907 graph.finalize(scene);
920 .add_attribute(
"Attribute")
922 .add_node(ShaderNodeBuilder<GammaNode>(graph,
"Gamma_Cx").
set(
"Color",
one_float3()))
923 .add_connection(
"Attribute::Fac",
"Gamma_Cx::Gamma")
925 .add_node(ShaderNodeBuilder<GammaNode>(graph,
"Gamma_xC").
set(
"Gamma", 1.0f))
926 .add_connection(
"Attribute::Color",
"Gamma_xC::Color")
928 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Out")
930 .set_param(
"use_clamp",
true)
932 .add_connection(
"Gamma_Cx::Color",
"Out::Color1")
933 .add_connection(
"Gamma_xC::Color",
"Out::Color2")
934 .output_color(
"Out::Color");
936 graph.finalize(scene);
948 .add_node(ShaderNodeBuilder<BrightContrastNode>(graph,
"BrightContrast")
951 .
set(
"Contrast", 1.2f))
952 .output_color(
"BrightContrast::Color");
954 graph.finalize(scene);
966 .add_node(ShaderNodeBuilder<BlackbodyNode>(graph,
"Blackbody").
set(
"Temperature", 1200.0f))
967 .output_color(
"Blackbody::Color");
969 graph.finalize(scene);
988 .add_node(ShaderNodeBuilder<MathNode>(graph,
"Math")
990 .set_param(
"use_clamp",
false)
992 .
set(
"Value2", 0.9f))
993 .output_value(
"Math::Value");
995 graph.finalize(scene);
1007 .add_node(ShaderNodeBuilder<MathNode>(graph,
"Math")
1009 .set_param(
"use_clamp",
true)
1010 .
set(
"Value1", 0.7f)
1011 .
set(
"Value2", 0.9f))
1012 .output_value(
"Math::Value");
1014 graph.finalize(scene);
1026 .add_attribute(
"Attribute")
1028 .add_node(ShaderNodeBuilder<MathNode>(builder.graph(),
"Math_Cx")
1029 .set_param(
"math_type", type)
1030 .set_param(
"use_clamp",
false)
1031 .set(
"Value1", constval))
1032 .add_connection(
"Attribute::Fac",
"Math_Cx::Value2")
1034 .add_node(ShaderNodeBuilder<MathNode>(builder.graph(),
"Math_xC")
1035 .set_param(
"math_type", type)
1036 .set_param(
"use_clamp",
false)
1037 .set(
"Value2", constval))
1038 .add_connection(
"Attribute::Fac",
"Math_xC::Value1")
1040 .add_node(ShaderNodeBuilder<MathNode>(builder.graph(),
"Out")
1042 .set_param(
"use_clamp",
true))
1043 .add_connection(
"Math_Cx::Value",
"Out::Value1")
1044 .add_connection(
"Math_xC::Value",
"Out::Value2")
1045 .output_value(
"Out::Value");
1060 graph.finalize(scene);
1075 graph.finalize(scene);
1090 graph.finalize(scene);
1105 graph.finalize(scene);
1121 graph.finalize(scene);
1136 graph.finalize(scene);
1151 graph.finalize(scene);
1166 graph.finalize(scene);
1178 .add_node(ShaderNodeBuilder<VectorMathNode>(graph,
"VectorMath")
1182 .output_color(
"VectorMath::Vector");
1184 graph.finalize(scene);
1196 .add_attribute(
"Attribute")
1198 .add_node(ShaderNodeBuilder<VectorMathNode>(builder.graph(),
"Math_Cx")
1199 .set_param(
"math_type", type)
1200 .set(
"Vector1", constval))
1201 .add_connection(
"Attribute::Vector",
"Math_Cx::Vector2")
1203 .add_node(ShaderNodeBuilder<VectorMathNode>(builder.graph(),
"Math_xC")
1204 .set_param(
"math_type", type)
1205 .set(
"Vector2", constval))
1206 .add_connection(
"Attribute::Vector",
"Math_xC::Vector1")
1208 .add_node(ShaderNodeBuilder<VectorMathNode>(builder.graph(),
"Out")
1210 .add_connection(
"Math_Cx::Vector",
"Out::Vector1")
1211 .add_connection(
"Math_xC::Vector",
"Out::Vector2")
1212 .output_color(
"Out::Vector");
1227 graph.finalize(scene);
1242 graph.finalize(scene);
1258 graph.finalize(scene);
1269 builder.add_node(ShaderNodeBuilder<GeometryNode>(graph,
"Geometry1"))
1270 .add_node(ShaderNodeBuilder<BumpNode>(graph,
"Bump"))
1271 .add_connection(
"Geometry1::Normal",
"Bump::Normal")
1272 .output_color(
"Bump::Normal");
1274 graph.finalize(scene);
1285 builder.add_node(ShaderNodeBuilder<BumpNode>(graph,
"Bump")).output_color(
"Bump::Normal");
1287 graph.finalize(scene);
1294 for (
int i = 0; i <
steps; i++) {
1295 buffer[i] =
mix(start, end,
float(i) / (
steps - 1));
1312 .add_node(ShaderNodeBuilder<RGBCurvesNode>(graph,
"Curves")
1313 .set_param(
"curves", curve)
1314 .set_param(
"min_x", 0.1f)
1315 .set_param(
"max_x", 0.9f)
1318 .output_color(
"Curves::Color");
1320 graph.finalize(scene);
1335 builder.add_attribute(
"Attribute")
1336 .add_node(ShaderNodeBuilder<RGBCurvesNode>(graph,
"Curves")
1337 .set_param(
"curves", curve)
1338 .set_param(
"min_x", 0.1f)
1339 .set_param(
"max_x", 0.9f)
1341 .add_connection(
"Attribute::Color",
"Curves::Color")
1342 .output_color(
"Curves::Color");
1344 graph.finalize(scene);
1360 .add_node(ShaderNodeBuilder<RGBCurvesNode>(graph,
"Curves")
1361 .set_param(
"curves", curve)
1362 .set_param(
"min_x", 0.1f)
1363 .set_param(
"max_x", 0.9f)
1366 .output_color(
"Curves::Color");
1368 graph.finalize(scene);
1384 .add_node(ShaderNodeBuilder<VectorCurvesNode>(graph,
"Curves")
1385 .set_param(
"curves", curve)
1386 .set_param(
"min_x", 0.1f)
1387 .set_param(
"max_x", 0.9f)
1390 .output_color(
"Curves::Vector");
1392 graph.finalize(scene);
1407 builder.add_attribute(
"Attribute")
1408 .add_node(ShaderNodeBuilder<VectorCurvesNode>(graph,
"Curves")
1409 .set_param(
"curves", curve)
1410 .set_param(
"min_x", 0.1f)
1411 .set_param(
"max_x", 0.9f)
1413 .add_connection(
"Attribute::Vector",
"Curves::Vector")
1414 .output_color(
"Curves::Vector");
1416 graph.finalize(scene);
1435 .add_node(ShaderNodeBuilder<RGBRampNode>(graph,
"Ramp")
1436 .set_param(
"ramp", curve)
1437 .set_param(
"ramp_alpha", alpha)
1438 .set_param(
"interpolate",
true)
1440 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix").set_param(
"mix_type",
NODE_MIX_ADD))
1441 .add_connection(
"Ramp::Color",
"Mix::Color1")
1442 .add_connection(
"Ramp::Alpha",
"Mix::Color2")
1443 .output_color(
"Mix::Color");
1445 graph.finalize(scene);
1464 .add_node(ShaderNodeBuilder<RGBRampNode>(graph,
"Ramp")
1465 .set_param(
"ramp", curve)
1466 .set_param(
"ramp_alpha", alpha)
1467 .set_param(
"interpolate",
false)
1469 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix").set_param(
"mix_type",
NODE_MIX_ADD))
1470 .add_connection(
"Ramp::Color",
"Mix::Color1")
1471 .add_connection(
"Ramp::Alpha",
"Mix::Color2")
1472 .output_color(
"Mix::Color");
1474 graph.finalize(scene);
1485 "Folding Invert::Color to socket convert_float_to_color::value_color.");
1487 "Folding convert_color_to_float::value_float to socket Attribute::Fac.");
1489 builder.add_attribute(
"Attribute")
1490 .add_node(ShaderNodeBuilder<InvertNode>(graph,
"Invert").
set(
"Fac", 0.0f))
1491 .add_connection(
"Attribute::Fac",
"Invert::Color")
1492 .output_value(
"Invert::Color");
1494 graph.finalize(scene);
1505 "Folding VecAdd::Vector to socket convert_color_to_vector::value_vector.");
1507 "Folding convert_vector_to_color::value_color to socket Attribute::Color.");
1509 builder.add_attribute(
"Attribute")
1510 .add_node(ShaderNodeBuilder<VectorMathNode>(graph,
"VecAdd")
1513 .add_connection(
"Attribute::Color",
"VecAdd::Vector1")
1514 .output_color(
"VecAdd::Vector");
1516 graph.finalize(scene);
1527 "Folding MathAdd::Value to socket convert_color_to_float::value_float.");
1530 builder.add_attribute(
"Attribute")
1531 .add_node(ShaderNodeBuilder<MathNode>(graph,
"MathAdd")
1533 .
set(
"Value2", 0.0f))
1534 .add_connection(
"Attribute::Color",
"MathAdd::Value1")
1535 .output_color(
"MathAdd::Value");
1537 graph.finalize(scene);
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
@ NODE_VECTOR_MATH_CROSS_PRODUCT
@ NODE_VECTOR_MATH_SUBTRACT
ShaderGraphBuilder & add_connection(const string &from, const string &to)
ShaderGraphBuilder & output_value(const string &from)
ShaderGraphBuilder(ShaderGraph *graph)
map< string, ShaderNode * > node_map_
ShaderGraphBuilder & output_closure(const string &from)
ShaderGraphBuilder & add_node(const T &node)
ShaderGraphBuilder & add_attribute(const string &name)
ShaderGraphBuilder & output_color(const string &from)
ShaderNode * find_node(const string &name)
ShaderNodeBuilder & set(const string &input_name, V value)
ShaderNodeBuilder & set_param(const string &input_name, V value)
const string & name() const
ShaderNode * node() const
ShaderNodeBuilder(ShaderGraph &graph, const string &name)
static void init_fallback_config()
static Device * create(const DeviceInfo &info, Stats &stats, Profiler &profiler, bool headless)
ShaderGraphBuilder builder
ShaderOutput * output(const char *name)
T * resize(size_t newsize)
#define CCL_NAMESPACE_END
node_ attributes set("label", ss.str())
void util_logging_verbosity_set(int verbosity)
void util_logging_start()
ccl_device_inline float3 one_float3()
CCL_NAMESPACE_BEGIN ccl_device_inline float3 zero_float3()
ccl_device_inline float3 log(float3 v)
#define INVALID_INFO_MESSAGE(log, message)
TEST_F(RenderGraph, deduplicate_deep)
#define EXPECT_ANY_MESSAGE(log)
void init_test_curve(array< T > &buffer, T start, T end, int steps)
#define CORRECT_INFO_MESSAGE(log, message)
static void build_math_partial_test_graph(ShaderGraphBuilder &builder, NodeMathType type, float constval)
static void build_mix_partial_test_graph(ShaderGraphBuilder &builder, NodeMix type, float3 constval)
static void build_vecmath_partial_test_graph(ShaderGraphBuilder &builder, NodeVectorMathType type, float3 constval)
void string_split(vector< string > &tokens, const string &str, const string &separators, bool skip_empty_tokens)
CCL_NAMESPACE_BEGIN struct Window V