17 #include "testing/mock_log.h"
18 #include "testing/testing.h"
33 using testing::AnyNumber;
34 using testing::HasSubstr;
35 using testing::ScopedMockLog;
45 node_ =
graph.create_node<
T>();
61 ShaderInput *input_socket = node_->input(input_name.c_str());
62 EXPECT_NE((
void *)
NULL, input_socket);
63 input_socket->
set(value);
69 const SocketType *input_socket = node_->
type->find_input(ustring(input_name.c_str()));
70 EXPECT_NE((
void *)
NULL, input_socket);
71 node_->set(*input_socket, value);
84 node_map_[
"Output"] =
graph->output();
89 map<string, ShaderNode *>::iterator it = node_map_.find(name);
90 if (it == node_map_.end()) {
99 graph_->add(
node.node());
100 node_map_[
node.name()] =
node.node();
111 ShaderNode *node_from = find_node(tokens_from[0]), *node_to = find_node(tokens_to[0]);
112 EXPECT_NE((
void *)
NULL, node_from);
113 EXPECT_NE((
void *)
NULL, node_to);
114 EXPECT_NE(node_from, node_to);
116 ShaderInput *socket_to = node_to->input(tokens_to[1].c_str());
117 EXPECT_NE((
void *)
NULL, socket_from);
118 EXPECT_NE((
void *)
NULL, socket_to);
119 graph_->connect(socket_from, socket_to);
195 #define EXPECT_ANY_MESSAGE(log) EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber());
197 #define CORRECT_INFO_MESSAGE(log, message) \
198 EXPECT_CALL(log, Log(google::INFO, _, HasSubstr(message)));
200 #define INVALID_INFO_MESSAGE(log, message) \
201 EXPECT_CALL(log, Log(google::INFO, _, HasSubstr(message))).Times(0);
213 builder.add_node(ShaderNodeBuilder<GeometryNode>(
graph,
"Geometry1"))
214 .add_node(ShaderNodeBuilder<GeometryNode>(
graph,
"Geometry2"))
215 .add_node(ShaderNodeBuilder<ValueNode>(
graph,
"Value1").set_param(
"value", 0.8f))
216 .add_node(ShaderNodeBuilder<ValueNode>(
graph,
"Value2").set_param(
"value", 0.8f))
217 .add_node(ShaderNodeBuilder<NoiseTextureNode>(
graph,
"Noise1"))
218 .add_node(ShaderNodeBuilder<NoiseTextureNode>(
graph,
"Noise2"))
219 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix")
222 .add_connection(
"Geometry1::Parametric",
"Noise1::Vector")
223 .add_connection(
"Value1::Value",
"Noise1::Scale")
224 .add_connection(
"Noise1::Color",
"Mix::Color1")
225 .add_connection(
"Geometry2::Parametric",
"Noise2::Vector")
226 .add_connection(
"Value2::Value",
"Noise2::Scale")
227 .add_connection(
"Noise2::Color",
"Mix::Color2")
228 .output_color(
"Mix::Color");
243 "Folding convert_float_to_color::value_color to constant (0.8, 0.8, 0.8).");
246 .add_node(ShaderNodeBuilder<RGBToBWNode>(
graph,
"RGBToBWNodeNode")
248 .output_color(
"RGBToBWNodeNode::Val");
262 builder.add_node(ShaderNodeBuilder<EmissionNode>(
graph,
"Emission").set(
"Color",
zero_float3()))
263 .output_closure(
"Emission::Emission");
273 builder.add_node(ShaderNodeBuilder<EmissionNode>(
graph,
"Emission").set(
"Strength", 0.0f))
274 .output_closure(
"Emission::Emission");
289 .add_node(ShaderNodeBuilder<BackgroundNode>(
graph,
"Background").set(
"Color",
zero_float3()))
290 .output_closure(
"Background::Background");
300 builder.add_node(ShaderNodeBuilder<BackgroundNode>(
graph,
"Background").set(
"Strength", 0.0f))
301 .output_closure(
"Background::Background");
317 builder.add_node(ShaderNodeBuilder<DiffuseBsdfNode>(
graph,
"Diffuse"))
318 .add_node(ShaderNodeBuilder<AddClosureNode>(
graph,
"AddClosure1"))
319 .add_node(ShaderNodeBuilder<AddClosureNode>(
graph,
"AddClosure2"))
320 .add_node(ShaderNodeBuilder<AddClosureNode>(
graph,
"AddClosure3"))
321 .add_connection(
"Diffuse::BSDF",
"AddClosure1::Closure1")
322 .add_connection(
"Diffuse::BSDF",
"AddClosure2::Closure2")
323 .add_connection(
"AddClosure1::Closure",
"AddClosure3::Closure1")
324 .add_connection(
"AddClosure2::Closure",
"AddClosure3::Closure2")
325 .output_closure(
"AddClosure3::Closure");
342 builder.add_attribute(
"Attribute")
343 .add_node(ShaderNodeBuilder<DiffuseBsdfNode>(
graph,
"Diffuse"))
345 .add_node(ShaderNodeBuilder<MixClosureNode>(
graph,
"MixClosure1").set(
"Fac", 0.0f))
346 .add_connection(
"Diffuse::BSDF",
"MixClosure1::Closure1")
348 .add_node(ShaderNodeBuilder<MixClosureNode>(
graph,
"MixClosure2").set(
"Fac", 1.0f))
349 .add_connection(
"Diffuse::BSDF",
"MixClosure2::Closure2")
351 .add_node(ShaderNodeBuilder<MixClosureNode>(
graph,
"MixClosure3"))
352 .add_connection(
"Attribute::Fac",
"MixClosure3::Fac")
353 .add_connection(
"MixClosure1::Closure",
"MixClosure3::Closure1")
354 .add_connection(
"MixClosure2::Closure",
"MixClosure3::Closure2")
355 .output_closure(
"MixClosure3::Closure");
370 .add_node(ShaderNodeBuilder<InvertNode>(
graph,
"Invert")
373 .output_color(
"Invert::Color");
387 builder.add_attribute(
"Attribute")
388 .add_node(ShaderNodeBuilder<InvertNode>(
graph,
"Invert").set(
"Fac", 0.0f))
389 .add_connection(
"Attribute::Color",
"Invert::Color")
390 .output_color(
"Invert::Color");
405 .add_node(ShaderNodeBuilder<InvertNode>(
graph,
"Invert")
408 .output_color(
"Invert::Color");
423 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"MixAdd")
425 .set_param(
"use_clamp",
false)
429 .output_color(
"MixAdd::Color");
444 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"MixAdd")
446 .set_param(
"use_clamp",
true)
450 .output_color(
"MixAdd::Color");
464 builder.add_attribute(
"Attribute1")
465 .add_attribute(
"Attribute2")
466 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix")
468 .set_param(
"use_clamp",
false)
470 .add_connection(
"Attribute1::Color",
"Mix::Color1")
471 .add_connection(
"Attribute2::Color",
"Mix::Color2")
472 .output_color(
"Mix::Color");
486 builder.add_attribute(
"Attribute1")
487 .add_attribute(
"Attribute2")
488 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix")
490 .set_param(
"use_clamp",
false)
492 .add_connection(
"Attribute1::Color",
"Mix::Color1")
493 .add_connection(
"Attribute2::Color",
"Mix::Color2")
494 .output_color(
"Mix::Color");
508 builder.add_attribute(
"Attribute1")
509 .add_attribute(
"Attribute2")
510 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix")
512 .set_param(
"use_clamp",
false)
514 .add_connection(
"Attribute1::Color",
"Mix::Color1")
515 .add_connection(
"Attribute2::Color",
"Mix::Color2")
516 .output_color(
"Mix::Color");
530 builder.add_attribute(
"Attribute1")
531 .add_attribute(
"Attribute2")
532 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix")
534 .set_param(
"use_clamp",
true)
536 .add_connection(
"Attribute1::Color",
"Mix::Color1")
537 .add_connection(
"Attribute2::Color",
"Mix::Color2")
538 .output_color(
"Mix::Color");
555 builder.add_attribute(
"Attribute1")
556 .add_attribute(
"Attribute2")
558 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"MixBlend1")
560 .set_param(
"use_clamp",
false)
562 .add_connection(
"Attribute1::Color",
"MixBlend1::Color1")
563 .add_connection(
"Attribute2::Color",
"MixBlend1::Color2")
565 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"MixBlend2")
567 .set_param(
"use_clamp",
false)
569 .add_connection(
"Attribute1::Color",
"MixBlend2::Color2")
570 .add_connection(
"Attribute2::Color",
"MixBlend2::Color1")
572 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"MixBlend3")
574 .set_param(
"use_clamp",
false))
575 .add_connection(
"Attribute1::Fac",
"MixBlend3::Fac")
576 .add_connection(
"MixBlend1::Color",
"MixBlend3::Color1")
577 .add_connection(
"MixBlend2::Color",
"MixBlend3::Color2")
578 .output_color(
"MixBlend3::Color");
592 builder.add_attribute(
"Attribute")
593 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix")
595 .set_param(
"use_clamp",
true)
597 .add_connection(
"Attribute::Color",
"Mix::Color1")
598 .add_connection(
"Attribute::Color",
"Mix::Color2")
599 .output_color(
"Mix::Color");
613 builder.add_attribute(
"Attribute")
614 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix")
616 .set_param(
"use_clamp",
true)
618 .add_connection(
"Attribute::Color",
"Mix::Color1")
619 .add_connection(
"Attribute::Color",
"Mix::Color2")
620 .output_color(
"Mix::Color");
634 .add_attribute(
"Attribute")
636 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Mix_Cx_Fx")
637 .set_param(
"mix_type",
type)
638 .set_param(
"use_clamp",
false)
639 .set(
"Color1", constval))
640 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Mix_Cx_F1")
641 .set_param(
"mix_type",
type)
642 .set_param(
"use_clamp",
false)
643 .set(
"Color1", constval)
645 .add_connection(
"Attribute::Fac",
"Mix_Cx_Fx::Fac")
646 .add_connection(
"Attribute::Color",
"Mix_Cx_Fx::Color2")
647 .add_connection(
"Attribute::Color",
"Mix_Cx_F1::Color2")
649 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Mix_xC_Fx")
650 .set_param(
"mix_type",
type)
651 .set_param(
"use_clamp",
false)
652 .set(
"Color2", constval))
653 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Mix_xC_F1")
654 .set_param(
"mix_type",
type)
655 .set_param(
"use_clamp",
false)
656 .set(
"Color2", constval)
658 .add_connection(
"Attribute::Fac",
"Mix_xC_Fx::Fac")
659 .add_connection(
"Attribute::Color",
"Mix_xC_Fx::Color1")
660 .add_connection(
"Attribute::Color",
"Mix_xC_F1::Color1")
662 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Out12")
664 .set_param(
"use_clamp",
true)
666 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Out34")
668 .set_param(
"use_clamp",
true)
670 .add_node(ShaderNodeBuilder<MixNode>(builder.graph(),
"Out1234")
672 .set_param(
"use_clamp",
true)
674 .add_connection(
"Mix_Cx_Fx::Color",
"Out12::Color1")
675 .add_connection(
"Mix_Cx_F1::Color",
"Out12::Color2")
676 .add_connection(
"Mix_xC_Fx::Color",
"Out34::Color1")
677 .add_connection(
"Mix_xC_F1::Color",
"Out34::Color2")
678 .add_connection(
"Out12::Color",
"Out1234::Color1")
679 .add_connection(
"Out34::Color",
"Out1234::Color2")
680 .output_color(
"Out1234::Color");
804 .add_node(ShaderNodeBuilder<SeparateRGBNode>(
graph,
"SeparateRGB")
806 .add_node(ShaderNodeBuilder<CombineRGBNode>(
graph,
"CombineRGB"))
807 .add_connection(
"SeparateRGB::R",
"CombineRGB::R")
808 .add_connection(
"SeparateRGB::G",
"CombineRGB::G")
809 .add_connection(
"SeparateRGB::B",
"CombineRGB::B")
810 .output_color(
"CombineRGB::Image");
826 log,
"Folding convert_vector_to_color::value_color to constant (0.3, 0.5, 0.7).");
829 .add_node(ShaderNodeBuilder<SeparateXYZNode>(
graph,
"SeparateXYZ")
831 .add_node(ShaderNodeBuilder<CombineXYZNode>(
graph,
"CombineXYZ"))
832 .add_connection(
"SeparateXYZ::X",
"CombineXYZ::X")
833 .add_connection(
"SeparateXYZ::Y",
"CombineXYZ::Y")
834 .add_connection(
"SeparateXYZ::Z",
"CombineXYZ::Z")
835 .output_color(
"CombineXYZ::Vector");
852 .add_node(ShaderNodeBuilder<SeparateHSVNode>(
graph,
"SeparateHSV")
854 .add_node(ShaderNodeBuilder<CombineHSVNode>(
graph,
"CombineHSV"))
855 .add_connection(
"SeparateHSV::H",
"CombineHSV::H")
856 .add_connection(
"SeparateHSV::S",
"CombineHSV::S")
857 .add_connection(
"SeparateHSV::V",
"CombineHSV::V")
858 .output_color(
"CombineHSV::Color");
872 .add_node(ShaderNodeBuilder<GammaNode>(
graph,
"Gamma")
875 .output_color(
"Gamma::Color");
890 .add_attribute(
"Attribute")
892 .add_node(ShaderNodeBuilder<GammaNode>(
graph,
"Gamma_Cx").set(
"Color",
zero_float3()))
893 .add_connection(
"Attribute::Fac",
"Gamma_Cx::Gamma")
895 .add_node(ShaderNodeBuilder<GammaNode>(
graph,
"Gamma_xC").set(
"Gamma", 0.0f))
896 .add_connection(
"Attribute::Color",
"Gamma_xC::Color")
898 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Out")
900 .set_param(
"use_clamp",
true)
902 .add_connection(
"Gamma_Cx::Color",
"Out::Color1")
903 .add_connection(
"Gamma_xC::Color",
"Out::Color2")
904 .output_color(
"Out::Color");
919 .add_attribute(
"Attribute")
921 .add_node(ShaderNodeBuilder<GammaNode>(
graph,
"Gamma_Cx").set(
"Color",
one_float3()))
922 .add_connection(
"Attribute::Fac",
"Gamma_Cx::Gamma")
924 .add_node(ShaderNodeBuilder<GammaNode>(
graph,
"Gamma_xC").set(
"Gamma", 1.0f))
925 .add_connection(
"Attribute::Color",
"Gamma_xC::Color")
927 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Out")
929 .set_param(
"use_clamp",
true)
931 .add_connection(
"Gamma_Cx::Color",
"Out::Color1")
932 .add_connection(
"Gamma_xC::Color",
"Out::Color2")
933 .output_color(
"Out::Color");
947 .add_node(ShaderNodeBuilder<BrightContrastNode>(
graph,
"BrightContrast")
950 .set(
"Contrast", 1.2f))
951 .output_color(
"BrightContrast::Color");
965 .add_node(ShaderNodeBuilder<BlackbodyNode>(
graph,
"Blackbody").set(
"Temperature", 1200.0f))
966 .output_color(
"Blackbody::Color");
987 .add_node(ShaderNodeBuilder<MathNode>(
graph,
"Math")
989 .set_param(
"use_clamp",
false)
991 .set(
"Value2", 0.9f))
992 .output_value(
"Math::Value");
1006 .add_node(ShaderNodeBuilder<MathNode>(
graph,
"Math")
1008 .set_param(
"use_clamp",
true)
1009 .set(
"Value1", 0.7f)
1010 .set(
"Value2", 0.9f))
1011 .output_value(
"Math::Value");
1025 .add_attribute(
"Attribute")
1027 .add_node(ShaderNodeBuilder<MathNode>(builder.graph(),
"Math_Cx")
1028 .set_param(
"math_type",
type)
1029 .set_param(
"use_clamp",
false)
1030 .set(
"Value1", constval))
1031 .add_connection(
"Attribute::Fac",
"Math_Cx::Value2")
1033 .add_node(ShaderNodeBuilder<MathNode>(builder.graph(),
"Math_xC")
1034 .set_param(
"math_type",
type)
1035 .set_param(
"use_clamp",
false)
1036 .set(
"Value2", constval))
1037 .add_connection(
"Attribute::Fac",
"Math_xC::Value1")
1039 .add_node(ShaderNodeBuilder<MathNode>(builder.graph(),
"Out")
1041 .set_param(
"use_clamp",
true))
1042 .add_connection(
"Math_Cx::Value",
"Out::Value1")
1043 .add_connection(
"Math_xC::Value",
"Out::Value2")
1044 .output_value(
"Out::Value");
1177 .add_node(ShaderNodeBuilder<VectorMathNode>(
graph,
"VectorMath")
1181 .output_color(
"VectorMath::Vector");
1195 .add_attribute(
"Attribute")
1197 .add_node(ShaderNodeBuilder<VectorMathNode>(builder.graph(),
"Math_Cx")
1198 .set_param(
"math_type",
type)
1199 .set(
"Vector1", constval))
1200 .add_connection(
"Attribute::Vector",
"Math_Cx::Vector2")
1202 .add_node(ShaderNodeBuilder<VectorMathNode>(builder.graph(),
"Math_xC")
1203 .set_param(
"math_type",
type)
1204 .set(
"Vector2", constval))
1205 .add_connection(
"Attribute::Vector",
"Math_xC::Vector1")
1207 .add_node(ShaderNodeBuilder<VectorMathNode>(builder.graph(),
"Out")
1209 .add_connection(
"Math_Cx::Vector",
"Out::Vector1")
1210 .add_connection(
"Math_xC::Vector",
"Out::Vector2")
1211 .output_color(
"Out::Vector");
1268 builder.add_node(ShaderNodeBuilder<GeometryNode>(
graph,
"Geometry1"))
1269 .add_node(ShaderNodeBuilder<BumpNode>(
graph,
"Bump"))
1270 .add_connection(
"Geometry1::Normal",
"Bump::Normal")
1271 .output_color(
"Bump::Normal");
1284 builder.add_node(ShaderNodeBuilder<BumpNode>(
graph,
"Bump")).output_color(
"Bump::Normal");
1293 for (
int i = 0; i <
steps; i++) {
1311 .add_node(ShaderNodeBuilder<RGBCurvesNode>(
graph,
"Curves")
1312 .set_param(
"curves",
curve)
1313 .set_param(
"min_x", 0.1f)
1314 .set_param(
"max_x", 0.9f)
1317 .output_color(
"Curves::Color");
1334 builder.add_attribute(
"Attribute")
1335 .add_node(ShaderNodeBuilder<RGBCurvesNode>(
graph,
"Curves")
1336 .set_param(
"curves",
curve)
1337 .set_param(
"min_x", 0.1f)
1338 .set_param(
"max_x", 0.9f)
1340 .add_connection(
"Attribute::Color",
"Curves::Color")
1341 .output_color(
"Curves::Color");
1359 .add_node(ShaderNodeBuilder<RGBCurvesNode>(
graph,
"Curves")
1360 .set_param(
"curves",
curve)
1361 .set_param(
"min_x", 0.1f)
1362 .set_param(
"max_x", 0.9f)
1365 .output_color(
"Curves::Color");
1383 .add_node(ShaderNodeBuilder<VectorCurvesNode>(
graph,
"Curves")
1384 .set_param(
"curves",
curve)
1385 .set_param(
"min_x", 0.1f)
1386 .set_param(
"max_x", 0.9f)
1389 .output_color(
"Curves::Vector");
1406 builder.add_attribute(
"Attribute")
1407 .add_node(ShaderNodeBuilder<VectorCurvesNode>(
graph,
"Curves")
1408 .set_param(
"curves",
curve)
1409 .set_param(
"min_x", 0.1f)
1410 .set_param(
"max_x", 0.9f)
1412 .add_connection(
"Attribute::Vector",
"Curves::Vector")
1413 .output_color(
"Curves::Vector");
1434 .add_node(ShaderNodeBuilder<RGBRampNode>(
graph,
"Ramp")
1435 .set_param(
"ramp",
curve)
1436 .set_param(
"ramp_alpha",
alpha)
1437 .set_param(
"interpolate",
true)
1439 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix").set_param(
"mix_type",
NODE_MIX_ADD))
1440 .add_connection(
"Ramp::Color",
"Mix::Color1")
1441 .add_connection(
"Ramp::Alpha",
"Mix::Color2")
1442 .output_color(
"Mix::Color");
1463 .add_node(ShaderNodeBuilder<RGBRampNode>(
graph,
"Ramp")
1464 .set_param(
"ramp",
curve)
1465 .set_param(
"ramp_alpha",
alpha)
1466 .set_param(
"interpolate",
false)
1468 .add_node(ShaderNodeBuilder<MixNode>(
graph,
"Mix").set_param(
"mix_type",
NODE_MIX_ADD))
1469 .add_connection(
"Ramp::Color",
"Mix::Color1")
1470 .add_connection(
"Ramp::Alpha",
"Mix::Color2")
1471 .output_color(
"Mix::Color");
1484 "Folding Invert::Color to socket convert_float_to_color::value_color.");
1486 "Folding convert_color_to_float::value_float to socket Attribute::Fac.");
1488 builder.add_attribute(
"Attribute")
1489 .add_node(ShaderNodeBuilder<InvertNode>(
graph,
"Invert").set(
"Fac", 0.0f))
1490 .add_connection(
"Attribute::Fac",
"Invert::Color")
1491 .output_value(
"Invert::Color");
1504 "Folding VecAdd::Vector to socket convert_color_to_vector::value_vector.");
1506 "Folding convert_vector_to_color::value_color to socket Attribute::Color.");
1508 builder.add_attribute(
"Attribute")
1509 .add_node(ShaderNodeBuilder<VectorMathNode>(
graph,
"VecAdd")
1512 .add_connection(
"Attribute::Color",
"VecAdd::Vector1")
1513 .output_color(
"VecAdd::Vector");
1526 "Folding MathAdd::Value to socket convert_color_to_float::value_float.");
1529 builder.add_attribute(
"Attribute")
1530 .add_node(ShaderNodeBuilder<MathNode>(
graph,
"MathAdd")
1532 .set(
"Value2", 0.0f))
1533 .add_connection(
"Attribute::Color",
"MathAdd::Value1")
1534 .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(DeviceInfo &info, Stats &stats, Profiler &profiler, bool background=true)
ShaderGraphBuilder builder
ShaderOutput * output(const char *name)
static CCL_NAMESPACE_BEGIN const double alpha
#define CCL_NAMESPACE_END
#define make_float3(x, y, z)
__kernel void ccl_constant KernelData ccl_global void ccl_global char ccl_global int ccl_global char ccl_global unsigned int ccl_global float * buffer
static float lerp(float t, float a, float b)
INLINE Rall1d< T, V, S > log(const Rall1d< T, V, S > &arg)
#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 util_logging_verbosity_set(int verbosity)
void util_logging_start()
ccl_device_inline float3 one_float3()
ccl_device_inline float3 zero_float3()
void string_split(vector< string > &tokens, const string &str, const string &separators, bool skip_empty_tokens)
CCL_NAMESPACE_BEGIN struct View V