5#include "testing/mock_log.h"
6#include "testing/testing.h"
22using testing::AnyNumber;
23using testing::HasSubstr;
24using testing::ScopedMockLog;
51 EXPECT_NE((
void *)
nullptr, 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 *)
nullptr, input_socket);
60 node_->set(*input_socket, value);
78 const map<string, ShaderNode *>::iterator it =
node_map_.find(name);
102 EXPECT_NE((
void *)
nullptr, node_from);
103 EXPECT_NE((
void *)
nullptr, node_to);
104 EXPECT_NE(node_from, node_to);
107 EXPECT_NE((
void *)
nullptr, socket_from);
108 EXPECT_NE((
void *)
nullptr, socket_to);
109 graph_->connect(socket_from, socket_to);
197#define EXPECT_ANY_MESSAGE(log) EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber());
199#define CORRECT_INFO_MESSAGE(log, message) \
200 EXPECT_CALL(log, Log(google::INFO, _, HasSubstr(message)));
202#define INVALID_INFO_MESSAGE(log, message) \
203 EXPECT_CALL(log, Log(google::INFO, _, HasSubstr(message))).Times(0);
215 builder.add_node(ShaderNodeBuilder<GeometryNode>(graph,
"Geometry1"))
216 .add_node(ShaderNodeBuilder<GeometryNode>(graph,
"Geometry2"))
217 .add_node(ShaderNodeBuilder<ValueNode>(graph,
"Value1").set_param(
"value", 0.8f))
218 .add_node(ShaderNodeBuilder<ValueNode>(graph,
"Value2").set_param(
"value", 0.8f))
219 .add_node(ShaderNodeBuilder<NoiseTextureNode>(graph,
"Noise1"))
220 .add_node(ShaderNodeBuilder<NoiseTextureNode>(graph,
"Noise2"))
221 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix")
224 .add_connection(
"Geometry1::Parametric",
"Noise1::Vector")
225 .add_connection(
"Value1::Value",
"Noise1::Scale")
226 .add_connection(
"Noise1::Color",
"Mix::Color1")
227 .add_connection(
"Geometry2::Parametric",
"Noise2::Vector")
228 .add_connection(
"Value2::Value",
"Noise2::Scale")
229 .add_connection(
"Noise2::Color",
"Mix::Color2")
230 .output_color(
"Mix::Color");
232 graph.finalize(scene.get());
245 "Folding convert_float_to_color::value_color to constant (0.8, 0.8, 0.8).");
248 .add_node(ShaderNodeBuilder<RGBToBWNode>(graph,
"RGBToBWNodeNode")
250 .output_color(
"RGBToBWNodeNode::Val");
252 graph.finalize(scene.get());
264 builder.add_node(ShaderNodeBuilder<EmissionNode>(graph,
"Emission").set(
"Color",
zero_float3()))
265 .output_closure(
"Emission::Emission");
267 graph.finalize(scene.get());
275 builder.add_node(ShaderNodeBuilder<EmissionNode>(graph,
"Emission").set(
"Strength", 0.0f))
276 .output_closure(
"Emission::Emission");
278 graph.finalize(scene.get());
291 .add_node(ShaderNodeBuilder<BackgroundNode>(graph,
"Background").set(
"Color",
zero_float3()))
292 .output_closure(
"Background::Background");
294 graph.finalize(scene.get());
302 builder.add_node(ShaderNodeBuilder<BackgroundNode>(graph,
"Background").set(
"Strength", 0.0f))
303 .output_closure(
"Background::Background");
305 graph.finalize(scene.get());
319 builder.add_node(ShaderNodeBuilder<DiffuseBsdfNode>(graph,
"Diffuse"))
320 .add_node(ShaderNodeBuilder<AddClosureNode>(graph,
"AddClosure1"))
321 .add_node(ShaderNodeBuilder<AddClosureNode>(graph,
"AddClosure2"))
322 .add_node(ShaderNodeBuilder<AddClosureNode>(graph,
"AddClosure3"))
323 .add_connection(
"Diffuse::BSDF",
"AddClosure1::Closure1")
324 .add_connection(
"Diffuse::BSDF",
"AddClosure2::Closure2")
325 .add_connection(
"AddClosure1::Closure",
"AddClosure3::Closure1")
326 .add_connection(
"AddClosure2::Closure",
"AddClosure3::Closure2")
327 .output_closure(
"AddClosure3::Closure");
329 graph.finalize(scene.get());
344 builder.add_attribute(
"Attribute")
345 .add_node(ShaderNodeBuilder<DiffuseBsdfNode>(graph,
"Diffuse"))
347 .add_node(ShaderNodeBuilder<MixClosureNode>(graph,
"MixClosure1").set(
"Fac", 0.0f))
348 .add_connection(
"Diffuse::BSDF",
"MixClosure1::Closure1")
350 .add_node(ShaderNodeBuilder<MixClosureNode>(graph,
"MixClosure2").set(
"Fac", 1.0f))
351 .add_connection(
"Diffuse::BSDF",
"MixClosure2::Closure2")
353 .add_node(ShaderNodeBuilder<MixClosureNode>(graph,
"MixClosure3"))
354 .add_connection(
"Attribute::Fac",
"MixClosure3::Fac")
355 .add_connection(
"MixClosure1::Closure",
"MixClosure3::Closure1")
356 .add_connection(
"MixClosure2::Closure",
"MixClosure3::Closure2")
357 .output_closure(
"MixClosure3::Closure");
359 graph.finalize(scene.get());
372 .add_node(ShaderNodeBuilder<InvertNode>(graph,
"Invert")
375 .output_color(
"Invert::Color");
377 graph.finalize(scene.get());
389 builder.add_attribute(
"Attribute")
390 .add_node(ShaderNodeBuilder<InvertNode>(graph,
"Invert").set(
"Fac", 0.0f))
391 .add_connection(
"Attribute::Color",
"Invert::Color")
392 .output_color(
"Invert::Color");
394 graph.finalize(scene.get());
407 .add_node(ShaderNodeBuilder<InvertNode>(graph,
"Invert")
410 .output_color(
"Invert::Color");
412 graph.finalize(scene.get());
425 .add_node(ShaderNodeBuilder<MixNode>(graph,
"MixAdd")
427 .set_param(
"use_clamp",
false)
431 .output_color(
"MixAdd::Color");
433 graph.finalize(scene.get());
446 .add_node(ShaderNodeBuilder<MixNode>(graph,
"MixAdd")
448 .set_param(
"use_clamp",
true)
452 .output_color(
"MixAdd::Color");
454 graph.finalize(scene.get());
466 builder.add_attribute(
"Attribute1")
467 .add_attribute(
"Attribute2")
468 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix")
470 .set_param(
"use_clamp",
false)
472 .add_connection(
"Attribute1::Color",
"Mix::Color1")
473 .add_connection(
"Attribute2::Color",
"Mix::Color2")
474 .output_color(
"Mix::Color");
476 graph.finalize(scene.get());
488 builder.add_attribute(
"Attribute1")
489 .add_attribute(
"Attribute2")
490 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix")
492 .set_param(
"use_clamp",
false)
494 .add_connection(
"Attribute1::Color",
"Mix::Color1")
495 .add_connection(
"Attribute2::Color",
"Mix::Color2")
496 .output_color(
"Mix::Color");
498 graph.finalize(scene.get());
510 builder.add_attribute(
"Attribute1")
511 .add_attribute(
"Attribute2")
512 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix")
514 .set_param(
"use_clamp",
false)
516 .add_connection(
"Attribute1::Color",
"Mix::Color1")
517 .add_connection(
"Attribute2::Color",
"Mix::Color2")
518 .output_color(
"Mix::Color");
520 graph.finalize(scene.get());
532 builder.add_attribute(
"Attribute1")
533 .add_attribute(
"Attribute2")
534 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix")
536 .set_param(
"use_clamp",
true)
538 .add_connection(
"Attribute1::Color",
"Mix::Color1")
539 .add_connection(
"Attribute2::Color",
"Mix::Color2")
540 .output_color(
"Mix::Color");
542 graph.finalize(scene.get());
557 builder.add_attribute(
"Attribute1")
558 .add_attribute(
"Attribute2")
560 .add_node(ShaderNodeBuilder<MixNode>(graph,
"MixBlend1")
562 .set_param(
"use_clamp",
false)
564 .add_connection(
"Attribute1::Color",
"MixBlend1::Color1")
565 .add_connection(
"Attribute2::Color",
"MixBlend1::Color2")
567 .add_node(ShaderNodeBuilder<MixNode>(graph,
"MixBlend2")
569 .set_param(
"use_clamp",
false)
571 .add_connection(
"Attribute1::Color",
"MixBlend2::Color2")
572 .add_connection(
"Attribute2::Color",
"MixBlend2::Color1")
574 .add_node(ShaderNodeBuilder<MixNode>(graph,
"MixBlend3")
576 .set_param(
"use_clamp",
false))
577 .add_connection(
"Attribute1::Fac",
"MixBlend3::Fac")
578 .add_connection(
"MixBlend1::Color",
"MixBlend3::Color1")
579 .add_connection(
"MixBlend2::Color",
"MixBlend3::Color2")
580 .output_color(
"MixBlend3::Color");
582 graph.finalize(scene.get());
594 builder.add_attribute(
"Attribute")
595 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix")
597 .set_param(
"use_clamp",
true)
599 .add_connection(
"Attribute::Color",
"Mix::Color1")
600 .add_connection(
"Attribute::Color",
"Mix::Color2")
601 .output_color(
"Mix::Color");
603 graph.finalize(scene.get());
615 builder.add_attribute(
"Attribute")
616 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix")
618 .set_param(
"use_clamp",
true)
620 .add_connection(
"Attribute::Color",
"Mix::Color1")
621 .add_connection(
"Attribute::Color",
"Mix::Color2")
622 .output_color(
"Mix::Color");
624 graph.finalize(scene.get());
636 .add_attribute(
"Attribute")
638 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Mix_Cx_Fx")
639 .set_param(
"mix_type", type)
640 .set_param(
"use_clamp",
false)
641 .set(
"Color1", constval))
642 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Mix_Cx_F1")
643 .set_param(
"mix_type", type)
644 .set_param(
"use_clamp",
false)
645 .set(
"Color1", constval)
647 .add_connection(
"Attribute::Fac",
"Mix_Cx_Fx::Fac")
648 .add_connection(
"Attribute::Color",
"Mix_Cx_Fx::Color2")
649 .add_connection(
"Attribute::Color",
"Mix_Cx_F1::Color2")
651 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Mix_xC_Fx")
652 .set_param(
"mix_type", type)
653 .set_param(
"use_clamp",
false)
654 .set(
"Color2", constval))
655 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Mix_xC_F1")
656 .set_param(
"mix_type", type)
657 .set_param(
"use_clamp",
false)
658 .set(
"Color2", constval)
660 .add_connection(
"Attribute::Fac",
"Mix_xC_Fx::Fac")
661 .add_connection(
"Attribute::Color",
"Mix_xC_Fx::Color1")
662 .add_connection(
"Attribute::Color",
"Mix_xC_F1::Color1")
664 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Out12")
666 .set_param(
"use_clamp",
true)
668 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Out34")
670 .set_param(
"use_clamp",
true)
672 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Out1234")
674 .set_param(
"use_clamp",
true)
676 .add_connection(
"Mix_Cx_Fx::Color",
"Out12::Color1")
677 .add_connection(
"Mix_Cx_F1::Color",
"Out12::Color2")
678 .add_connection(
"Mix_xC_Fx::Color",
"Out34::Color1")
679 .add_connection(
"Mix_xC_F1::Color",
"Out34::Color2")
680 .add_connection(
"Out12::Color",
"Out1234::Color1")
681 .add_connection(
"Out34::Color",
"Out1234::Color2")
682 .output_color(
"Out1234::Color");
700 graph.finalize(scene.get());
717 graph.finalize(scene.get());
735 graph.finalize(scene.get());
752 graph.finalize(scene.get());
772 graph.finalize(scene.get());
791 graph.finalize(scene.get());
806 .add_node(ShaderNodeBuilder<SeparateRGBNode>(graph,
"SeparateRGB")
808 .add_node(ShaderNodeBuilder<CombineRGBNode>(graph,
"CombineRGB"))
809 .add_connection(
"SeparateRGB::R",
"CombineRGB::R")
810 .add_connection(
"SeparateRGB::G",
"CombineRGB::G")
811 .add_connection(
"SeparateRGB::B",
"CombineRGB::B")
812 .output_color(
"CombineRGB::Image");
814 graph.finalize(scene.get());
828 log,
"Folding convert_vector_to_color::value_color to constant (0.3, 0.5, 0.7).");
831 .add_node(ShaderNodeBuilder<SeparateXYZNode>(graph,
"SeparateXYZ")
833 .add_node(ShaderNodeBuilder<CombineXYZNode>(graph,
"CombineXYZ"))
834 .add_connection(
"SeparateXYZ::X",
"CombineXYZ::X")
835 .add_connection(
"SeparateXYZ::Y",
"CombineXYZ::Y")
836 .add_connection(
"SeparateXYZ::Z",
"CombineXYZ::Z")
837 .output_color(
"CombineXYZ::Vector");
839 graph.finalize(scene.get());
854 .add_node(ShaderNodeBuilder<SeparateHSVNode>(graph,
"SeparateHSV")
856 .add_node(ShaderNodeBuilder<CombineHSVNode>(graph,
"CombineHSV"))
857 .add_connection(
"SeparateHSV::H",
"CombineHSV::H")
858 .add_connection(
"SeparateHSV::S",
"CombineHSV::S")
859 .add_connection(
"SeparateHSV::V",
"CombineHSV::V")
860 .output_color(
"CombineHSV::Color");
862 graph.finalize(scene.get());
874 .add_node(ShaderNodeBuilder<GammaNode>(graph,
"Gamma")
877 .output_color(
"Gamma::Color");
879 graph.finalize(scene.get());
892 .add_attribute(
"Attribute")
894 .add_node(ShaderNodeBuilder<GammaNode>(graph,
"Gamma_Cx").set(
"Color",
zero_float3()))
895 .add_connection(
"Attribute::Fac",
"Gamma_Cx::Gamma")
897 .add_node(ShaderNodeBuilder<GammaNode>(graph,
"Gamma_xC").set(
"Gamma", 0.0f))
898 .add_connection(
"Attribute::Color",
"Gamma_xC::Color")
900 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Out")
902 .set_param(
"use_clamp",
true)
904 .add_connection(
"Gamma_Cx::Color",
"Out::Color1")
905 .add_connection(
"Gamma_xC::Color",
"Out::Color2")
906 .output_color(
"Out::Color");
908 graph.finalize(scene.get());
921 .add_attribute(
"Attribute")
923 .add_node(ShaderNodeBuilder<GammaNode>(graph,
"Gamma_Cx").set(
"Color",
one_float3()))
924 .add_connection(
"Attribute::Fac",
"Gamma_Cx::Gamma")
926 .add_node(ShaderNodeBuilder<GammaNode>(graph,
"Gamma_xC").set(
"Gamma", 1.0f))
927 .add_connection(
"Attribute::Color",
"Gamma_xC::Color")
929 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Out")
931 .set_param(
"use_clamp",
true)
933 .add_connection(
"Gamma_Cx::Color",
"Out::Color1")
934 .add_connection(
"Gamma_xC::Color",
"Out::Color2")
935 .output_color(
"Out::Color");
937 graph.finalize(scene.get());
949 .add_node(ShaderNodeBuilder<BrightContrastNode>(graph,
"BrightContrast")
952 .set(
"Contrast", 1.2f))
953 .output_color(
"BrightContrast::Color");
955 graph.finalize(scene.get());
967 .add_node(ShaderNodeBuilder<BlackbodyNode>(graph,
"Blackbody").set(
"Temperature", 1200.0f))
968 .output_color(
"Blackbody::Color");
970 graph.finalize(scene.get());
989 .add_node(ShaderNodeBuilder<MathNode>(graph,
"Math")
991 .set_param(
"use_clamp",
false)
993 .set(
"Value2", 0.9f))
994 .output_value(
"Math::Value");
996 graph.finalize(scene.get());
1008 .add_node(ShaderNodeBuilder<MathNode>(graph,
"Math")
1010 .set_param(
"use_clamp",
true)
1011 .set(
"Value1", 0.7f)
1012 .set(
"Value2", 0.9f))
1013 .output_value(
"Math::Value");
1015 graph.finalize(scene.get());
1024 const float constval)
1027 .add_attribute(
"Attribute")
1029 .add_node(ShaderNodeBuilder<MathNode>(builder.graph(),
"Math_Cx")
1030 .set_param(
"math_type", type)
1031 .set_param(
"use_clamp",
false)
1032 .set(
"Value1", constval))
1033 .add_connection(
"Attribute::Fac",
"Math_Cx::Value2")
1035 .add_node(ShaderNodeBuilder<MathNode>(builder.graph(),
"Math_xC")
1036 .set_param(
"math_type", type)
1037 .set_param(
"use_clamp",
false)
1038 .set(
"Value2", constval))
1039 .add_connection(
"Attribute::Fac",
"Math_xC::Value1")
1041 .add_node(ShaderNodeBuilder<MathNode>(builder.graph(),
"Out")
1043 .set_param(
"use_clamp",
true))
1044 .add_connection(
"Math_Cx::Value",
"Out::Value1")
1045 .add_connection(
"Math_xC::Value",
"Out::Value2")
1046 .output_value(
"Out::Value");
1061 graph.finalize(scene.get());
1076 graph.finalize(scene.get());
1091 graph.finalize(scene.get());
1106 graph.finalize(scene.get());
1122 graph.finalize(scene.get());
1137 graph.finalize(scene.get());
1152 graph.finalize(scene.get());
1167 graph.finalize(scene.get());
1179 .add_node(ShaderNodeBuilder<VectorMathNode>(graph,
"VectorMath")
1183 .output_color(
"VectorMath::Vector");
1185 graph.finalize(scene.get());
1197 .add_attribute(
"Attribute")
1199 .add_node(ShaderNodeBuilder<VectorMathNode>(builder.graph(),
"Math_Cx")
1200 .set_param(
"math_type", type)
1201 .set(
"Vector1", constval))
1202 .add_connection(
"Attribute::Vector",
"Math_Cx::Vector2")
1204 .add_node(ShaderNodeBuilder<VectorMathNode>(builder.graph(),
"Math_xC")
1205 .set_param(
"math_type", type)
1206 .set(
"Vector2", constval))
1207 .add_connection(
"Attribute::Vector",
"Math_xC::Vector1")
1209 .add_node(ShaderNodeBuilder<VectorMathNode>(builder.graph(),
"Out")
1211 .add_connection(
"Math_Cx::Vector",
"Out::Vector1")
1212 .add_connection(
"Math_xC::Vector",
"Out::Vector2")
1213 .output_color(
"Out::Vector");
1228 graph.finalize(scene.get());
1243 graph.finalize(scene.get());
1259 graph.finalize(scene.get());
1270 builder.add_node(ShaderNodeBuilder<GeometryNode>(graph,
"Geometry1"))
1271 .add_node(ShaderNodeBuilder<BumpNode>(graph,
"Bump"))
1272 .add_connection(
"Geometry1::Normal",
"Bump::Normal")
1273 .output_color(
"Bump::Normal");
1275 graph.finalize(scene.get());
1286 builder.add_node(ShaderNodeBuilder<BumpNode>(graph,
"Bump")).output_color(
"Bump::Normal");
1288 graph.finalize(scene.get());
1296 buffer[
i] =
mix(start, end,
float(
i) / (
steps - 1));
1313 .add_node(ShaderNodeBuilder<RGBCurvesNode>(graph,
"Curves")
1314 .set_param(
"curves", curve)
1315 .set_param(
"min_x", 0.1f)
1316 .set_param(
"max_x", 0.9f)
1319 .output_color(
"Curves::Color");
1321 graph.finalize(scene.get());
1336 builder.add_attribute(
"Attribute")
1337 .add_node(ShaderNodeBuilder<RGBCurvesNode>(graph,
"Curves")
1338 .set_param(
"curves", curve)
1339 .set_param(
"min_x", 0.1f)
1340 .set_param(
"max_x", 0.9f)
1342 .add_connection(
"Attribute::Color",
"Curves::Color")
1343 .output_color(
"Curves::Color");
1345 graph.finalize(scene.get());
1361 .add_node(ShaderNodeBuilder<RGBCurvesNode>(graph,
"Curves")
1362 .set_param(
"curves", curve)
1363 .set_param(
"min_x", 0.1f)
1364 .set_param(
"max_x", 0.9f)
1367 .output_color(
"Curves::Color");
1369 graph.finalize(scene.get());
1385 .add_node(ShaderNodeBuilder<VectorCurvesNode>(graph,
"Curves")
1386 .set_param(
"curves", curve)
1387 .set_param(
"min_x", 0.1f)
1388 .set_param(
"max_x", 0.9f)
1391 .output_color(
"Curves::Vector");
1393 graph.finalize(scene.get());
1408 builder.add_attribute(
"Attribute")
1409 .add_node(ShaderNodeBuilder<VectorCurvesNode>(graph,
"Curves")
1410 .set_param(
"curves", curve)
1411 .set_param(
"min_x", 0.1f)
1412 .set_param(
"max_x", 0.9f)
1414 .add_connection(
"Attribute::Vector",
"Curves::Vector")
1415 .output_color(
"Curves::Vector");
1417 graph.finalize(scene.get());
1436 .add_node(ShaderNodeBuilder<RGBRampNode>(graph,
"Ramp")
1437 .set_param(
"ramp", curve)
1438 .set_param(
"ramp_alpha", alpha)
1439 .set_param(
"interpolate",
true)
1441 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix").set_param(
"mix_type",
NODE_MIX_ADD))
1442 .add_connection(
"Ramp::Color",
"Mix::Color1")
1443 .add_connection(
"Ramp::Alpha",
"Mix::Color2")
1444 .output_color(
"Mix::Color");
1446 graph.finalize(scene.get());
1465 .add_node(ShaderNodeBuilder<RGBRampNode>(graph,
"Ramp")
1466 .set_param(
"ramp", curve)
1467 .set_param(
"ramp_alpha", alpha)
1468 .set_param(
"interpolate",
false)
1470 .add_node(ShaderNodeBuilder<MixNode>(graph,
"Mix").set_param(
"mix_type",
NODE_MIX_ADD))
1471 .add_connection(
"Ramp::Color",
"Mix::Color1")
1472 .add_connection(
"Ramp::Alpha",
"Mix::Color2")
1473 .output_color(
"Mix::Color");
1475 graph.finalize(scene.get());
1486 "Folding Invert::Color to socket convert_float_to_color::value_color.");
1488 "Folding convert_color_to_float::value_float to socket Attribute::Fac.");
1490 builder.add_attribute(
"Attribute")
1491 .add_node(ShaderNodeBuilder<InvertNode>(graph,
"Invert").set(
"Fac", 0.0f))
1492 .add_connection(
"Attribute::Fac",
"Invert::Color")
1493 .output_value(
"Invert::Color");
1495 graph.finalize(scene.get());
1506 "Folding VecAdd::Vector to socket convert_color_to_vector::value_vector.");
1508 "Folding convert_vector_to_color::value_color to socket Attribute::Color.");
1510 builder.add_attribute(
"Attribute")
1511 .add_node(ShaderNodeBuilder<VectorMathNode>(graph,
"VecAdd")
1514 .add_connection(
"Attribute::Color",
"VecAdd::Vector1")
1515 .output_color(
"VecAdd::Vector");
1517 graph.finalize(scene.get());
1528 "Folding MathAdd::Value to socket convert_color_to_float::value_float.");
1531 builder.add_attribute(
"Attribute")
1532 .add_node(ShaderNodeBuilder<MathNode>(graph,
"MathAdd")
1534 .set(
"Value2", 0.0f))
1535 .add_connection(
"Attribute::Color",
"MathAdd::Value1")
1536 .output_color(
"MathAdd::Value");
1538 graph.finalize(scene.get());
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 unique_ptr< Device > create(const DeviceInfo &info, Stats &stats, Profiler &profiler, bool headless)
ShaderGraphBuilder builder
unique_ptr< Scene > scene
unique_ptr< Device > device_cpu
T * create_node(Args &&...args)
ShaderInput * input(const char *name)
ShaderOutput * output(const char *name)
T * resize(const size_t newsize)
#define CCL_NAMESPACE_END
void util_logging_verbosity_set(const int verbosity)
void util_logging_start()
ccl_device_inline float3 one_float3()
CCL_NAMESPACE_BEGIN ccl_device_inline float3 zero_float3()
#define INVALID_INFO_MESSAGE(log, message)
void init_test_curve(array< T > &buffer, T start, T end, const int steps)
TEST_F(RenderGraph, deduplicate_deep)
static void build_math_partial_test_graph(ShaderGraphBuilder &builder, NodeMathType type, const float constval)
static void build_mix_partial_test_graph(ShaderGraphBuilder &builder, NodeMix type, const float3 constval)
static void build_vecmath_partial_test_graph(ShaderGraphBuilder &builder, NodeVectorMathType type, const float3 constval)
#define EXPECT_ANY_MESSAGE(log)
#define CORRECT_INFO_MESSAGE(log, message)
void string_split(vector< string > &tokens, const string &str, const string &separators, bool skip_empty_tokens)
CCL_NAMESPACE_BEGIN struct Window V