Rumba C++ SDK
PlugDescriptor.h
Go to the documentation of this file.
1 /*
2 
3  *
4  ***
5  *****
6  ********************* Mercenaries Engineering SARL
7  ***************** Copyright (C) 2018
8  *************
9  ********* http://www.mercenaries-engineering.com
10  ***********
11  **** ****
12  ** **
13 
14 */
15 #pragma once
16 
17 #include "Export.h"
18 #include "Value.h"
19 #include "Plug.h"
20 #include "Ptr.h"
21 
22  namespace maquina
23  {
24  class Value;
25  class EvalContext;
26  class PartialInvalidation;
27  using PartialInvalidationPtr = Ptr<const PartialInvalidation>;
28 
31  {
32  public:
33  enum Flags
34  {
35  none = 0,
36  cache = 1 << 0,
37  time_varying = 1 << 1,
38  serial = 1 << 3,
39  graph_invisible = 1 << 8,
40  hidden = 1 << 8,
41  channel = 1 << 9,
42  constant = 1 << 10,
43  cache_exact = 1 << 11,
44  main = 1 << 12,
45  background = 1 << 30
46  };
47 
50  {
52  (
53  const char* plug_name,
54  int time_offset = 0
55  ) :
56  _plug_name(plug_name),
57  _time_offset(time_offset)
58  {}
59 
60  const char* _plug_name;
62  };
63 
66  {
68  (
69  const char* plug_name,
70  const Value& default_value
71  ) :
72  _plug_name(plug_name),
73  _default_value(default_value)
74  {
75  }
76 
77  const char* _plug_name;
79  };
80 
82 
84  const char* plug_name,
85  const Value& default_value,
86  uint32_t flags = serial,
87  const char* ui = ""
88  ) :
89  _plug_name(plug_name),
90  _default_value(default_value),
91  _flags(flags),
92  _ui(ui)
93  {}
94 
96 
106  const char *plug_name,
107  const Value &default_value,
108  uint32_t flags,
109  const char* ui,
110  const std::function<Value(EvalContext&)>& eval_handler,
111  const std::vector<InternalDependencies> &intern_deps,
112  PartialInvalidationPtr (*partial_invalidation_handler)(const Plug& plug, int dep, const PartialInvalidationPtr& pi) = nullptr,
113  int first_extern_deps = -1,
114  const std::vector<ExternalDependencies> &extern_deps = {}
115  ) :
116  _plug_name(plug_name),
117  _default_value(default_value),
118  _flags(flags),
119  _ui(ui),
120  _eval_handler(eval_handler),
121  _intern_deps(intern_deps),
122  _partial_invalidation_handler(partial_invalidation_handler),
123  _first_extern_deps(first_extern_deps),
124  _extern_deps(extern_deps)
125  {}
126 
127  std::string _plug_name;
129  uint32_t _flags = 0;
130  std::string _ui;
131  std::function<Value(EvalContext&)> _eval_handler;
132  std::vector<InternalDependencies> _intern_deps;
135  std::vector<ExternalDependencies> _extern_deps;
136  };
137  }
A plug descriptor to pass to the Registry::register_node() function.
Definition: PlugDescriptor.h:30
This plug value should be keeped in memory because it takes time to be computed.
Definition: PlugDescriptor.h:36
ExternalDependencies(const char *plug_name, const Value &default_value)
Definition: PlugDescriptor.h:68
This plug should not be visible in the graph editor.
Definition: PlugDescriptor.h:39
A plug internal dependency descriptor.
Definition: PlugDescriptor.h:49
InternalDependencies(const char *plug_name, int time_offset=0)
Definition: PlugDescriptor.h:52
std::vector< ExternalDependencies > _extern_deps
Definition: PlugDescriptor.h:135
Value _default_value
Definition: PlugDescriptor.h:78
Definition: PlugDescriptor.h:35
Value _default_value
Definition: PlugDescriptor.h:128
This version of the SDK is unstable, i-e, it may change with no warning.
Definition: AddCurveAction.h:20
A plug external dependency descriptor.
Definition: PlugDescriptor.h:65
int _first_extern_deps
Definition: PlugDescriptor.h:134
const char * _plug_name
Definition: PlugDescriptor.h:77
This plug is evaluated by the background engine.
Definition: PlugDescriptor.h:45
This plug is always visible.
Definition: PlugDescriptor.h:44
This class holds the evaluation context passed to the evaluation handler during a plug evaluation...
Definition: EvalContext.h:51
PartialInvalidationPtr(* _partial_invalidation_handler)(const Plug &plug, int dep, const PartialInvalidationPtr &pi)
Definition: PlugDescriptor.h:133
const char * _plug_name
Definition: PlugDescriptor.h:60
This plug is not animable (i.e no animation curve, only constant values)
Definition: PlugDescriptor.h:42
PlugDescriptor(const char *plug_name, const Value &default_value, uint32_t flags, const char *ui, const std::function< Value(EvalContext &)> &eval_handler, const std::vector< InternalDependencies > &intern_deps, PartialInvalidationPtr(*partial_invalidation_handler)(const Plug &plug, int dep, const PartialInvalidationPtr &pi)=nullptr, int first_extern_deps=-1, const std::vector< ExternalDependencies > &extern_deps={})
Register an evaluated plug.
Definition: PlugDescriptor.h:105
This plug is a channel.
Definition: PlugDescriptor.h:41
A node plug.
Definition: Plug.h:52
Ptr< const PartialInvalidation > PartialInvalidationPtr
Definition: EvalContext.h:26
int _time_offset
Definition: PlugDescriptor.h:61
PlugDescriptor(const char *plug_name, const Value &default_value, uint32_t flags=serial, const char *ui="")
Register an input plug.
Definition: PlugDescriptor.h:83
This plug should be hidden in the UI by default.
Definition: PlugDescriptor.h:40
std::string _plug_name
Definition: PlugDescriptor.h:127
This plug is cached with the exact value.
Definition: PlugDescriptor.h:43
Flags
Definition: PlugDescriptor.h:33
This plug value should be serialized.
Definition: PlugDescriptor.h:38
std::function< Value(EvalContext &)> _eval_handler
Definition: PlugDescriptor.h:131
std::vector< InternalDependencies > _intern_deps
Definition: PlugDescriptor.h:132
This plug is never constant.
Definition: PlugDescriptor.h:37
std::string _ui
Definition: PlugDescriptor.h:130
Base class of all Rumba values.
Definition: Value.h:34
uint32_t _flags
Definition: PlugDescriptor.h:129