1 #ifndef OGLPLUS_TEXGEN_FUNCTIONAL_NODE_HPP
9 #define OGLPLUS_TEXGEN_FUNCTIONAL_NODE_HPP
14 namespace eagine::oglp::texgen {
16 enum class unary_function {
40 class unary_function_output :
public base_output {
42 friend class unary_function_node;
44 input_with_const_default<float[4]> _input;
48 unary_function_output(node_intf& parent, unary_function);
50 unary_function_output(node_intf& parent)
51 : unary_function_output(parent, unary_function::
none) {}
57 std::ostream& definitions(std::ostream& out, compile_context& ctxt)
override;
60 class unary_function_node
61 :
public unary_single_output_node<
62 unary_function_output,
63 decltype(unary_function_output::_input),
64 &unary_function_output::_input> {
66 unary_function_node& set_function(unary_function func) {
71 unary_function_node& set_value(
float x,
float y,
float z,
float w) {
72 _output._input.fallback().set(x, y, z, w);
77 enum class binary_function {
97 class binary_function_output :
public base_output {
99 friend class binary_function_node;
101 input_with_const_default<float[4]> _input_a;
102 input_with_const_default<float[4]> _input_b;
103 binary_function _func;
106 binary_function_output(node_intf& parent, binary_function);
108 binary_function_output(node_intf& parent)
109 : binary_function_output(parent, binary_function::average) {}
115 std::ostream& definitions(std::ostream& out, compile_context& ctxt)
override;
118 class binary_function_node
119 :
public binary_single_output_node<
120 binary_function_output,
121 decltype(binary_function_output::_input_a),
122 &binary_function_output::_input_a,
123 decltype(binary_function_output::_input_b),
124 &binary_function_output::_input_b> {
126 binary_function_node& set_function(binary_function func) {
127 _output._func = func;
131 binary_function_node& set_value_a(
float x,
float y,
float z,
float w) {
132 _output._input_a.fallback().set(x, y, z, w);
136 binary_function_node& set_value_b(
float x,
float y,
float z,
float w) {
137 _output._input_b.fallback().set(x, y, z, w);
144 #if !OGLPLUS_LINK_LIBRARY || defined(OGLPLUS_IMPLEMENTING_LIBRARY)
145 #include <oglplus/texgen/functional_node.inl>
148 #endif // OGLPLUS_TEXGEN_FUNCTIONAL_NODE_HPP