4 #include "testing/mock_log.h"
5 #include "testing/testing.h"
20 using testing::AnyNumber;
21 using testing::HasSubstr;
22 using testing::ScopedMockLog;
32 node_ =
graph.create_node<
T>();
48 ShaderInput *input_socket = node_->input(input_name.c_str());
49 EXPECT_NE((
void *)
NULL, input_socket);
50 input_socket->
set(value);
56 const SocketType *input_socket = node_->
type->find_input(ustring(input_name.c_str()));
57 EXPECT_NE((
void *)
NULL, input_socket);
58 node_->set(*input_socket, value);
71 node_map_[
"Output"] =
graph->output();
76 map<string, ShaderNode *>::iterator it = node_map_.find(name);
77 if (it == node_map_.end()) {
86 graph_->add(
node.node());
87 node_map_[
node.name()] =
node.node();
98 ShaderNode *node_from = find_node(tokens_from[0]), *node_to = find_node(tokens_to[0]);
99 EXPECT_NE((
void *)
NULL, node_from);
100 EXPECT_NE((
void *)
NULL, node_to);
101 EXPECT_NE(node_from, node_to);
103 ShaderInput *socket_to = node_to->input(tokens_to[1].c_str());
104 EXPECT_NE((
void *)
NULL, socket_from);
105 EXPECT_NE((
void *)
NULL, socket_to);
106 graph_->connect(socket_from, socket_to);
182 #define EXPECT_ANY_MESSAGE(log) EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber());
184 #define CORRECT_INFO_MESSAGE(log, message) \
185 EXPECT_CALL(log, Log(google::INFO, _, HasSubstr(message)));
187 #define INVALID_INFO_MESSAGE(log, message) \
188 EXPECT_CALL(log, Log(google::INFO, _, HasSubstr(message))).Times(0);
200 builder.add_node(ShaderNodeBuilder<GeometryNode>(
graph,
"Geometry1"))
201 .add_node(ShaderNodeBuilder<GeometryNode>(
graph,
"Geometry2"))
202 .add_node(ShaderNodeBuilder<ValueNode>(
graph,
"Value1").set_param(
"value", 0.8f))
203 .add_node(ShaderNodeBuilder<ValueNode>(
graph,
"Value2").set_param(
"value", 0.8f))
204 .add_node(ShaderNodeBuilder<NoiseTextureNode>(
graph,
"Noise1"))
205 .add_node(ShaderNodeBuilder<NoiseTextureNode>(
graph,
"Noise2"))
206 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix")
209 .add_connection(
"Geometry1::Parametric",
"Noise1::Vector")
210 .add_connection(
"Value1::Value",
"Noise1::Scale")
211 .add_connection(
"Noise1::Color",
"Mix::Color1")
212 .add_connection(
"Geometry2::Parametric",
"Noise2::Vector")
213 .add_connection(
"Value2::Value",
"Noise2::Scale")
214 .add_connection(
"Noise2::Color",
"Mix::Color2")
215 .output_color(
"Mix::Color");
230 "Folding convert_float_to_color::value_color to constant (0.8, 0.8, 0.8).");
233 .add_node(ShaderNodeBuilder<RGBToBWNode>(
graph,
"RGBToBWNodeNode")
235 .output_color(
"RGBToBWNodeNode::Val");
249 builder.add_node(ShaderNodeBuilder<EmissionNode>(
graph,
"Emission").set(
"Color",
zero_float3()))
250 .output_closure(
"Emission::Emission");
260 builder.add_node(ShaderNodeBuilder<EmissionNode>(
graph,
"Emission").set(
"Strength", 0.0f))
261 .output_closure(
"Emission::Emission");
276 .add_node(ShaderNodeBuilder<BackgroundNode>(
graph,
"Background").set(
"Color",
zero_float3()))
277 .output_closure(
"Background::Background");
287 builder.add_node(ShaderNodeBuilder<BackgroundNode>(
graph,
"Background").set(
"Strength", 0.0f))
288 .output_closure(
"Background::Background");
304 builder.add_node(ShaderNodeBuilder<DiffuseBsdfNode>(
graph,
"Diffuse"))
305 .add_node(ShaderNodeBuilder<AddClosureNode>(
graph,
"AddClosure1"))
306 .add_node(ShaderNodeBuilder<AddClosureNode>(
graph,
"AddClosure2"))
307 .add_node(ShaderNodeBuilder<AddClosureNode>(
graph,
"AddClosure3"))
308 .add_connection(
"Diffuse::BSDF",
"AddClosure1::Closure1")
309 .add_connection(
"Diffuse::BSDF",
"AddClosure2::Closure2")
310 .add_connection(
"AddClosure1::Closure",
"AddClosure3::Closure1")
311 .add_connection(
"AddClosure2::Closure",
"AddClosure3::Closure2")
312 .output_closure(
"AddClosure3::Closure");
329 builder.add_attribute(
"Attribute")
330 .add_node(ShaderNodeBuilder<DiffuseBsdfNode>(
graph,
"Diffuse"))
332 .add_node(ShaderNodeBuilder<MixClosureNode>(
graph,
"MixClosure1").set(
"Fac", 0.0f))
333 .add_connection(
"Diffuse::BSDF",
"MixClosure1::Closure1")
335 .add_node(ShaderNodeBuilder<MixClosureNode>(
graph,
"MixClosure2").set(
"Fac", 1.0f))
336 .add_connection(
"Diffuse::BSDF",
"MixClosure2::Closure2")
338 .add_node(ShaderNodeBuilder<MixClosureNode>(
graph,
"MixClosure3"))
339 .add_connection(
"Attribute::Fac",
"MixClosure3::Fac")
340 .add_connection(
"MixClosure1::Closure",
"MixClosure3::Closure1")
341 .add_connection(
"MixClosure2::Closure",
"MixClosure3::Closure2")
342 .output_closure(
"MixClosure3::Closure");
357 .add_node(ShaderNodeBuilder<InvertNode>(
graph,
"Invert")
360 .output_color(
"Invert::Color");
374 builder.add_attribute(
"Attribute")
375 .add_node(ShaderNodeBuilder<InvertNode>(
graph,
"Invert").set(
"Fac", 0.0f))
376 .add_connection(
"Attribute::Color",
"Invert::Color")
377 .output_color(
"Invert::Color");
392 .add_node(ShaderNodeBuilder<InvertNode>(
graph,
"Invert")
395 .output_color(
"Invert::Color");
410 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"MixAdd")
412 .set_param(
"use_clamp",
false)
416 .output_color(
"MixAdd::Color");
431 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"MixAdd")
433 .set_param(
"use_clamp",
true)
437 .output_color(
"MixAdd::Color");
451 builder.add_attribute(
"Attribute1")
452 .add_attribute(
"Attribute2")
453 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix")
455 .set_param(
"use_clamp",
false)
457 .add_connection(
"Attribute1::Color",
"Mix::Color1")
458 .add_connection(
"Attribute2::Color",
"Mix::Color2")
459 .output_color(
"Mix::Color");
473 builder.add_attribute(
"Attribute1")
474 .add_attribute(
"Attribute2")
475 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix")
477 .set_param(
"use_clamp",
false)
479 .add_connection(
"Attribute1::Color",
"Mix::Color1")
480 .add_connection(
"Attribute2::Color",
"Mix::Color2")
481 .output_color(
"Mix::Color");
495 builder.add_attribute(
"Attribute1")
496 .add_attribute(
"Attribute2")
497 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix")
499 .set_param(
"use_clamp",
false)
501 .add_connection(
"Attribute1::Color",
"Mix::Color1")
502 .add_connection(
"Attribute2::Color",
"Mix::Color2")
503 .output_color(
"Mix::Color");
517 builder.add_attribute(
"Attribute1")
518 .add_attribute(
"Attribute2")
519 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix")
521 .set_param(
"use_clamp",
true)
523 .add_connection(
"Attribute1::Color",
"Mix::Color1")
524 .add_connection(
"Attribute2::Color",
"Mix::Color2")
525 .output_color(
"Mix::Color");
542 builder.add_attribute(
"Attribute1")
543 .add_attribute(
"Attribute2")
545 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"MixBlend1")
547 .set_param(
"use_clamp",
false)
549 .add_connection(
"Attribute1::Color",
"MixBlend1::Color1")
550 .add_connection(
"Attribute2::Color",
"MixBlend1::Color2")
552 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"MixBlend2")
554 .set_param(
"use_clamp",
false)
556 .add_connection(
"Attribute1::Color",
"MixBlend2::Color2")
557 .add_connection(
"Attribute2::Color",
"MixBlend2::Color1")
559 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"MixBlend3")
561 .set_param(
"use_clamp",
false))
562 .add_connection(
"Attribute1::Fac",
"MixBlend3::Fac")
563 .add_connection(
"MixBlend1::Color",
"MixBlend3::Color1")
564 .add_connection(
"MixBlend2::Color",
"MixBlend3::Color2")
565 .output_color(
"MixBlend3::Color");
579 builder.add_attribute(
"Attribute")
580 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix")
582 .set_param(
"use_clamp",
true)
584 .add_connection(
"Attribute::Color",
"Mix::Color1")
585 .add_connection(
"Attribute::Color",
"Mix::Color2")
586 .output_color(
"Mix::Color");
600 builder.add_attribute(
"Attribute")
601 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix")
603 .set_param(
"use_clamp",
true)
605 .add_connection(
"Attribute::Color",
"Mix::Color1")
606 .add_connection(
"Attribute::Color",
"Mix::Color2")
607 .output_color(
"Mix::Color");
621 .add_attribute(
"Attribute")
623 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Mix_Cx_Fx")
624 .set_param(
"mix_type",
type)
625 .set_param(
"use_clamp",
false)
626 .set(
"Color1", constval))
627 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Mix_Cx_F1")
628 .set_param(
"mix_type",
type)
629 .set_param(
"use_clamp",
false)
630 .set(
"Color1", constval)
632 .add_connection(
"Attribute::Fac",
"Mix_Cx_Fx::Fac")
633 .add_connection(
"Attribute::Color",
"Mix_Cx_Fx::Color2")
634 .add_connection(
"Attribute::Color",
"Mix_Cx_F1::Color2")
636 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Mix_xC_Fx")
637 .set_param(
"mix_type",
type)
638 .set_param(
"use_clamp",
false)
639 .set(
"Color2", constval))
640 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Mix_xC_F1")
641 .set_param(
"mix_type",
type)
642 .set_param(
"use_clamp",
false)
643 .set(
"Color2", constval)
645 .add_connection(
"Attribute::Fac",
"Mix_xC_Fx::Fac")
646 .add_connection(
"Attribute::Color",
"Mix_xC_Fx::Color1")
647 .add_connection(
"Attribute::Color",
"Mix_xC_F1::Color1")
649 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Out12")
651 .set_param(
"use_clamp",
true)
653 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Out34")
655 .set_param(
"use_clamp",
true)
657 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Out1234")
659 .set_param(
"use_clamp",
true)
661 .add_connection(
"Mix_Cx_Fx::Color",
"Out12::Color1")
662 .add_connection(
"Mix_Cx_F1::Color",
"Out12::Color2")
663 .add_connection(
"Mix_xC_Fx::Color",
"Out34::Color1")
664 .add_connection(
"Mix_xC_F1::Color",
"Out34::Color2")
665 .add_connection(
"Out12::Color",
"Out1234::Color1")
666 .add_connection(
"Out34::Color",
"Out1234::Color2")
667 .output_color(
"Out1234::Color");
791 .add_node(ShaderNodeBuilder<SeparateRGBNode>(
graph,
"SeparateRGB")
793 .add_node(ShaderNodeBuilder<CombineRGBNode>(
graph,
"CombineRGB"))
794 .add_connection(
"SeparateRGB::R",
"CombineRGB::R")
795 .add_connection(
"SeparateRGB::G",
"CombineRGB::G")
796 .add_connection(
"SeparateRGB::B",
"CombineRGB::B")
797 .output_color(
"CombineRGB::Image");
813 log,
"Folding convert_vector_to_color::value_color to constant (0.3, 0.5, 0.7).");
816 .add_node(ShaderNodeBuilder<SeparateXYZNode>(
graph,
"SeparateXYZ")
818 .add_node(ShaderNodeBuilder<CombineXYZNode>(
graph,
"CombineXYZ"))
819 .add_connection(
"SeparateXYZ::X",
"CombineXYZ::X")
820 .add_connection(
"SeparateXYZ::Y",
"CombineXYZ::Y")
821 .add_connection(
"SeparateXYZ::Z",
"CombineXYZ::Z")
822 .output_color(
"CombineXYZ::Vector");
839 .add_node(ShaderNodeBuilder<SeparateHSVNode>(
graph,
"SeparateHSV")
841 .add_node(ShaderNodeBuilder<CombineHSVNode>(
graph,
"CombineHSV"))
842 .add_connection(
"SeparateHSV::H",
"CombineHSV::H")
843 .add_connection(
"SeparateHSV::S",
"CombineHSV::S")
844 .add_connection(
"SeparateHSV::V",
"CombineHSV::V")
845 .output_color(
"CombineHSV::Color");
859 .add_node(ShaderNodeBuilder<GammaNode>(
graph,
"Gamma")
862 .output_color(
"Gamma::Color");
877 .add_attribute(
"Attribute")
879 .add_node(ShaderNodeBuilder<GammaNode>(
graph,
"Gamma_Cx").set(
"Color",
zero_float3()))
880 .add_connection(
"Attribute::Fac",
"Gamma_Cx::Gamma")
882 .add_node(ShaderNodeBuilder<GammaNode>(
graph,
"Gamma_xC").set(
"Gamma", 0.0f))
883 .add_connection(
"Attribute::Color",
"Gamma_xC::Color")
885 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Out")
887 .set_param(
"use_clamp",
true)
889 .add_connection(
"Gamma_Cx::Color",
"Out::Color1")
890 .add_connection(
"Gamma_xC::Color",
"Out::Color2")
891 .output_color(
"Out::Color");
906 .add_attribute(
"Attribute")
908 .add_node(ShaderNodeBuilder<GammaNode>(
graph,
"Gamma_Cx").set(
"Color",
one_float3()))
909 .add_connection(
"Attribute::Fac",
"Gamma_Cx::Gamma")
911 .add_node(ShaderNodeBuilder<GammaNode>(
graph,
"Gamma_xC").set(
"Gamma", 1.0f))
912 .add_connection(
"Attribute::Color",
"Gamma_xC::Color")
914 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Out")
916 .set_param(
"use_clamp",
true)
918 .add_connection(
"Gamma_Cx::Color",
"Out::Color1")
919 .add_connection(
"Gamma_xC::Color",
"Out::Color2")
920 .output_color(
"Out::Color");
934 .add_node(ShaderNodeBuilder<BrightContrastNode>(
graph,
"BrightContrast")
937 .set(
"Contrast", 1.2f))
938 .output_color(
"BrightContrast::Color");
952 .add_node(ShaderNodeBuilder<BlackbodyNode>(
graph,
"Blackbody").set(
"Temperature", 1200.0f))
953 .output_color(
"Blackbody::Color");
974 .add_node(ShaderNodeBuilder<MathNode>(
graph,
"Math")
976 .set_param(
"use_clamp",
false)
978 .set(
"Value2", 0.9f))
979 .output_value(
"Math::Value");
993 .add_node(ShaderNodeBuilder<MathNode>(
graph,
"Math")
995 .set_param(
"use_clamp",
true)
997 .set(
"Value2", 0.9f))
998 .output_value(
"Math::Value");
1012 .add_attribute(
"Attribute")
1014 .add_node(ShaderNodeBuilder<MathNode>(builder.graph(),
"Math_Cx")
1015 .set_param(
"math_type",
type)
1016 .set_param(
"use_clamp",
false)
1017 .set(
"Value1", constval))
1018 .add_connection(
"Attribute::Fac",
"Math_Cx::Value2")
1020 .add_node(ShaderNodeBuilder<MathNode>(builder.graph(),
"Math_xC")
1021 .set_param(
"math_type",
type)
1022 .set_param(
"use_clamp",
false)
1023 .set(
"Value2", constval))
1024 .add_connection(
"Attribute::Fac",
"Math_xC::Value1")
1026 .add_node(ShaderNodeBuilder<MathNode>(builder.graph(),
"Out")
1028 .set_param(
"use_clamp",
true))
1029 .add_connection(
"Math_Cx::Value",
"Out::Value1")
1030 .add_connection(
"Math_xC::Value",
"Out::Value2")
1031 .output_value(
"Out::Value");
1164 .add_node(ShaderNodeBuilder<VectorMathNode>(
graph,
"VectorMath")
1168 .output_color(
"VectorMath::Vector");
1182 .add_attribute(
"Attribute")
1184 .add_node(ShaderNodeBuilder<VectorMathNode>(builder.graph(),
"Math_Cx")
1185 .set_param(
"math_type",
type)
1186 .set(
"Vector1", constval))
1187 .add_connection(
"Attribute::Vector",
"Math_Cx::Vector2")
1189 .add_node(ShaderNodeBuilder<VectorMathNode>(builder.graph(),
"Math_xC")
1190 .set_param(
"math_type",
type)
1191 .set(
"Vector2", constval))
1192 .add_connection(
"Attribute::Vector",
"Math_xC::Vector1")
1194 .add_node(ShaderNodeBuilder<VectorMathNode>(builder.graph(),
"Out")
1196 .add_connection(
"Math_Cx::Vector",
"Out::Vector1")
1197 .add_connection(
"Math_xC::Vector",
"Out::Vector2")
1198 .output_color(
"Out::Vector");
1255 builder.add_node(ShaderNodeBuilder<GeometryNode>(
graph,
"Geometry1"))
1256 .add_node(ShaderNodeBuilder<BumpNode>(
graph,
"Bump"))
1257 .add_connection(
"Geometry1::Normal",
"Bump::Normal")
1258 .output_color(
"Bump::Normal");
1271 builder.add_node(ShaderNodeBuilder<BumpNode>(
graph,
"Bump")).output_color(
"Bump::Normal");
1280 for (
int i = 0; i <
steps; i++) {
1298 .add_node(ShaderNodeBuilder<RGBCurvesNode>(
graph,
"Curves")
1299 .set_param(
"curves",
curve)
1300 .set_param(
"min_x", 0.1f)
1301 .set_param(
"max_x", 0.9f)
1304 .output_color(
"Curves::Color");
1321 builder.add_attribute(
"Attribute")
1322 .add_node(ShaderNodeBuilder<RGBCurvesNode>(
graph,
"Curves")
1323 .set_param(
"curves",
curve)
1324 .set_param(
"min_x", 0.1f)
1325 .set_param(
"max_x", 0.9f)
1327 .add_connection(
"Attribute::Color",
"Curves::Color")
1328 .output_color(
"Curves::Color");
1346 .add_node(ShaderNodeBuilder<RGBCurvesNode>(
graph,
"Curves")
1347 .set_param(
"curves",
curve)
1348 .set_param(
"min_x", 0.1f)
1349 .set_param(
"max_x", 0.9f)
1352 .output_color(
"Curves::Color");
1370 .add_node(ShaderNodeBuilder<VectorCurvesNode>(
graph,
"Curves")
1371 .set_param(
"curves",
curve)
1372 .set_param(
"min_x", 0.1f)
1373 .set_param(
"max_x", 0.9f)
1376 .output_color(
"Curves::Vector");
1393 builder.add_attribute(
"Attribute")
1394 .add_node(ShaderNodeBuilder<VectorCurvesNode>(
graph,
"Curves")
1395 .set_param(
"curves",
curve)
1396 .set_param(
"min_x", 0.1f)
1397 .set_param(
"max_x", 0.9f)
1399 .add_connection(
"Attribute::Vector",
"Curves::Vector")
1400 .output_color(
"Curves::Vector");
1421 .add_node(ShaderNodeBuilder<RGBRampNode>(
graph,
"Ramp")
1422 .set_param(
"ramp",
curve)
1423 .set_param(
"ramp_alpha", alpha)
1424 .set_param(
"interpolate",
true)
1426 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix").set_param(
"mix_type",
NODE_MIX_ADD))
1427 .add_connection(
"Ramp::Color",
"Mix::Color1")
1428 .add_connection(
"Ramp::Alpha",
"Mix::Color2")
1429 .output_color(
"Mix::Color");
1450 .add_node(ShaderNodeBuilder<RGBRampNode>(
graph,
"Ramp")
1451 .set_param(
"ramp",
curve)
1452 .set_param(
"ramp_alpha", alpha)
1453 .set_param(
"interpolate",
false)
1455 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix").set_param(
"mix_type",
NODE_MIX_ADD))
1456 .add_connection(
"Ramp::Color",
"Mix::Color1")
1457 .add_connection(
"Ramp::Alpha",
"Mix::Color2")
1458 .output_color(
"Mix::Color");
1471 "Folding Invert::Color to socket convert_float_to_color::value_color.");
1473 "Folding convert_color_to_float::value_float to socket Attribute::Fac.");
1475 builder.add_attribute(
"Attribute")
1476 .add_node(ShaderNodeBuilder<InvertNode>(
graph,
"Invert").set(
"Fac", 0.0f))
1477 .add_connection(
"Attribute::Fac",
"Invert::Color")
1478 .output_value(
"Invert::Color");
1491 "Folding VecAdd::Vector to socket convert_color_to_vector::value_vector.");
1493 "Folding convert_vector_to_color::value_color to socket Attribute::Color.");
1495 builder.add_attribute(
"Attribute")
1496 .add_node(ShaderNodeBuilder<VectorMathNode>(
graph,
"VecAdd")
1499 .add_connection(
"Attribute::Color",
"VecAdd::Vector1")
1500 .output_color(
"VecAdd::Vector");
1513 "Folding MathAdd::Value to socket convert_color_to_float::value_float.");
1516 builder.add_attribute(
"Attribute")
1517 .add_node(ShaderNodeBuilder<MathNode>(
graph,
"MathAdd")
1519 .set(
"Value2", 0.0f))
1520 .add_connection(
"Attribute::Color",
"MathAdd::Value1")
1521 .output_color(
"MathAdd::Value");
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
@ NODE_VECTOR_MATH_CROSS_PRODUCT
@ NODE_VECTOR_MATH_SUBTRACT
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
ShaderGraphBuilder & output_value(const string &from)
ShaderGraphBuilder & add_attribute(const string &name)
ShaderGraphBuilder & add_node(const T &node)
ShaderNode * find_node(const string &name)
ShaderGraphBuilder & add_connection(const string &from, const string &to)
ShaderGraphBuilder(ShaderGraph *graph)
map< string, ShaderNode * > node_map_
ShaderGraphBuilder & output_closure(const string &from)
ShaderGraphBuilder & output_color(const string &from)
ShaderNodeBuilder & set(const string &input_name, V value)
ShaderNode * node() const
const string & name() const
ShaderNodeBuilder & set_param(const string &input_name, V value)
ShaderNodeBuilder(ShaderGraph &graph, const string &name)
static Device * create(const DeviceInfo &info, Stats &stats, Profiler &profiler)
ShaderGraphBuilder builder
ShaderOutput * output(const char *name)
#define CCL_NAMESPACE_END
ccl_global float * buffer
void util_logging_verbosity_set(int verbosity)
void util_logging_start()
ccl_device_inline float3 one_float3()
ccl_device_inline float3 zero_float3()
ccl_device_inline float3 log(float3 v)
static float lerp(float t, float a, float b)
#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