Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Radium dataflow rendering #1018

Draft
wants to merge 239 commits into
base: release-candidate
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
239 commits
Select commit Hold shift + click to select a range
26b52a3
[externals] Add Dataflow external stduuid
MathiasPaulin Sep 7, 2022
c0f285a
[core] add random point sets
MathiasPaulin Sep 7, 2022
5a4d94a
[unittests][core] add tests on random point sets
MathiasPaulin Sep 7, 2022
c91d8d4
[core] improve type utilities : add type traits utility and fix type …
MathiasPaulin Oct 2, 2022
aee2bfd
[cmake] Allows configuring INTERFACE library (e.g. header only)
MathiasPaulin Sep 7, 2022
5a9fd16
[scripts] generation of filelist is allows filelist per subdirectory
MathiasPaulin Sep 7, 2022
8ee90d8
[dataflow-core] first commit of dataflow component
MathiasPaulin Sep 7, 2022
5ea3a90
[examples][dataflow] add helloDataflow example
MathiasPaulin Sep 7, 2022
665d27e
[examples][dataflow] add graph serialization example
MathiasPaulin Oct 17, 2022
72fe1f4
[dataflow-qtgui] add QtGui subcomponent
MathiasPaulin Oct 17, 2022
09826ae
[examples][dataflow] add dataflow graph editor example
MathiasPaulin Oct 17, 2022
4f5201c
[dataflow-cmake] fix install of dataflow components
MathiasPaulin Sep 21, 2022
a342789
[dataflow-cmake] add missing precompilation header
MathiasPaulin Sep 29, 2022
74f5768
[dataflow-core] fix source nodes
MathiasPaulin Sep 29, 2022
486d7bb
[dataflow-rendering] add rendergraph subcomponent
MathiasPaulin Sep 29, 2022
5f993b8
[dataflow-all] improve serialization
MathiasPaulin Oct 2, 2022
794440a
[dataflow-core] improve type demangling for dataflow graph
MathiasPaulin Oct 2, 2022
120f745
[examples][dataflow] fix compilation of HelloGraph
MathiasPaulin Oct 3, 2022
e0876e3
[dataflow] introduced function communication between nodes
MathiasPaulin Oct 3, 2022
7f3db0d
[dataflow] better management of dataSetters for interface port
MathiasPaulin Oct 4, 2022
9bad6c0
[dataflow] Simplify code structure and node instanciation
MathiasPaulin Oct 4, 2022
b86c85d
[dataflow] TODO on builtinsNodes
MathiasPaulin Oct 5, 2022
7489803
[dataflow] make QtNodeEditor an external under then name RadiumNodeEd…
MathiasPaulin Oct 5, 2022
5fe9879
[dataflow] simplifies a bit Node interface
MathiasPaulin Oct 5, 2022
bc8db75
[dataflow] make port construction more robust
MathiasPaulin Oct 5, 2022
50dcb5e
[dataflow] accelerate compilation
MathiasPaulin Oct 5, 2022
f1c205a
[doc] update dependencies
MathiasPaulin Oct 6, 2022
145e552
[dataflow] disable rendering graph
MathiasPaulin Oct 6, 2022
ac93522
[dataflow] improve graph compilation/execution robustness
MathiasPaulin Oct 6, 2022
de34546
[dataflow] improve functionals
MathiasPaulin Oct 6, 2022
4b4e0c0
[example] add dataflow functionals example
MathiasPaulin Oct 6, 2022
c739b49
[dataflow] remove uneeded includes
MathiasPaulin Oct 6, 2022
a0dc724
[dataflow] improve compilation robustness
MathiasPaulin Oct 6, 2022
563c0b5
[dataflow] add reduce operator
MathiasPaulin Oct 6, 2022
1dfed68
[example] add test on reduce operator
MathiasPaulin Oct 6, 2022
7373dba
[dataflow] improve node's type readability
MathiasPaulin Oct 10, 2022
59b8219
[examples][dataflow] remove unneeded include
MathiasPaulin Oct 10, 2022
100d654
[dataflow] unify Sources, Sinks and Functional nodes declaration and …
MathiasPaulin Oct 10, 2022
7e671a7
[dataflow-core] add generic binary operator node
MathiasPaulin Oct 10, 2022
6524ca4
[unittests][dataflow] add first dataflow node unit tests
MathiasPaulin Oct 10, 2022
303dae0
[dataflow] remove dead code and fix some method profile
MathiasPaulin Oct 11, 2022
f93494b
[dataflow] add homogeneous BinaryOpNode on CoreDataType to standard f…
MathiasPaulin Oct 11, 2022
1a46b66
[unittests][dataflow] add graph load/save tests
MathiasPaulin Oct 11, 2022
0732c5d
[dataflow][rendering] improve codacy report
MathiasPaulin Oct 11, 2022
5b1e53e
[dataflow][examples] improve codacy report
MathiasPaulin Oct 11, 2022
b045281
[unittests][dataflow] improve codacy report
MathiasPaulin Oct 11, 2022
169011e
[unittests][dataflow] improve codacy report
MathiasPaulin Oct 11, 2022
dae930f
[dataflow] fix wrong log message
MathiasPaulin Oct 11, 2022
3ca1ca3
[tests] improve coverage of builtins node
MathiasPaulin Oct 11, 2022
668b3aa
[dataflow-core] improve nodes
MathiasPaulin Oct 11, 2022
5a82404
[example] include what is needed
MathiasPaulin Oct 11, 2022
bf66157
[unittests] add unit tests on sources and sinks
MathiasPaulin Oct 11, 2022
51e9b1d
[unittests] update unit tests on sources and sinks
MathiasPaulin Oct 12, 2022
d0a5150
[unittests] add unit tests on custom nodes
MathiasPaulin Oct 12, 2022
173b833
[dataflow] fix some inconsistencies in the code while improving cover…
MathiasPaulin Oct 12, 2022
a3c056a
[dataflow] improve source code readability.
MathiasPaulin Oct 13, 2022
14c4d84
[tests] add graph inspection unittest
MathiasPaulin Oct 17, 2022
6fa00f1
[dataflow] make it compiles on Windows
MathiasPaulin Oct 13, 2022
5ad5dce
[tests] simplify unittests on predefined nodes
MathiasPaulin Oct 14, 2022
ccfbffe
[dataflow] improve logging and error management
MathiasPaulin Oct 14, 2022
348cf8a
[tests] improve logging and error management
MathiasPaulin Oct 14, 2022
9c1f45e
[examples] fix snippet comments in HelloGraph
MathiasPaulin Oct 14, 2022
e24fe4f
[dataflow-core] improve class and namespace documentation
MathiasPaulin Oct 20, 2022
af2e855
[examples] fix snippet labels
MathiasPaulin Oct 20, 2022
bbc0e4a
[doc] add first documentation about node system
MathiasPaulin Oct 20, 2022
6f6f78c
[doc] node system typos.
dlyr Oct 25, 2022
9553ce1
[core] rename constexpr in Random utilities
MathiasPaulin Oct 25, 2022
0a80517
[tests] fix some typos on dataflow unittests and add doc snippets
MathiasPaulin Oct 25, 2022
167cc4f
[doc] use snippets from unittests
MathiasPaulin Oct 25, 2022
6233c15
[externals] update externals configuration
MathiasPaulin Nov 1, 2022
83a894d
[dataflow] update configuration files
MathiasPaulin Nov 1, 2022
3e38670
[dataflow-core] remove unwanted error messages
MathiasPaulin Nov 2, 2022
107a3e7
[dataflow-qtgui] improve contextual menu on node editor
MathiasPaulin Nov 2, 2022
ea6d934
[dataflow-qtgui] improve editable parameter gui and add TODO
MathiasPaulin Nov 2, 2022
20bd83e
[dataflow-core] allow sources and sinks to customize their interface …
MathiasPaulin Nov 3, 2022
2e46763
[dataflow] remove unneeded indicator
MathiasPaulin Nov 3, 2022
e396091
[dataflow-core] improve simplified type demangler
MathiasPaulin Nov 3, 2022
dc8c66b
[dataflow-core] fix comment typo
MathiasPaulin Nov 3, 2022
606eb0e
[dataflow-core] Fix singleton (static) initialization order to allow …
MathiasPaulin Nov 3, 2022
e107c45
[dataflow-core] allow to load any graph registered in a factory witho…
MathiasPaulin Nov 3, 2022
2653c72
[examples] allow to load any graph registered in a factory without kn…
MathiasPaulin Nov 3, 2022
201b6ed
[dataflow] fix typo in macro to generate code :(
MathiasPaulin Nov 3, 2022
eb770d2
[dataflow-core] add state flag to dataflowgraph
MathiasPaulin Nov 4, 2022
ffaada0
[dataflow-qtgui] add graph editor window as an available dataflow::qt…
MathiasPaulin Nov 4, 2022
ec88906
[examples] Simplify graph editor example
MathiasPaulin Nov 4, 2022
84d68c0
forget to install pre-commit -- fix format after installing
MathiasPaulin Nov 4, 2022
faf55c8
[dataflow-core] improve auto initialization of libraries
MathiasPaulin Nov 4, 2022
22af2f6
[dataflow-core] Add documentation about some type conflict in port sy…
MathiasPaulin Nov 4, 2022
090ae74
[dataflow-core] Workaround for the way the Qt Node Editor manage graphs.
MathiasPaulin Nov 4, 2022
5715441
[dataflow-qtgui] Workaround for the way the Qt Node Editor manage gra…
MathiasPaulin Nov 4, 2022
6a2a507
[dataflow-qtgui] add missing dllexport
MathiasPaulin Nov 4, 2022
4f55091
[dataflow-qtgui] fix crash at app exit
MathiasPaulin Nov 5, 2022
8b06e7b
[dataflow-core] modify node interface for better reporting.
MathiasPaulin Nov 5, 2022
213e59d
[tests] custom node update
MathiasPaulin Nov 6, 2022
53927e1
[doc] fix typo
MathiasPaulin Nov 14, 2022
8e1707e
[dataflow-core] prepare better ownership transfer
MathiasPaulin Nov 14, 2022
952ed69
[dataflow-core] refactor removeNode
MathiasPaulin Jan 11, 2023
a375125
[unittests] refactor removeNode
MathiasPaulin Jan 11, 2023
493343a
[dataflow] explicitly transfer ownership when adding a node to the graph
MathiasPaulin Jan 31, 2023
f081999
[unittests] explicitly transfer ownership when adding a node to the g…
MathiasPaulin Jan 31, 2023
e265a49
[examples] explicitly transfer ownership when adding a node to the graph
MathiasPaulin Jan 31, 2023
4064edf
[dataflow-core] remove .inl files
MathiasPaulin Jan 31, 2023
4cc6cf7
[dataflow-qtgui] remove .inl files
MathiasPaulin Jan 31, 2023
3cb978a
[dataflow-core] fix codacy warning
MathiasPaulin Jan 31, 2023
e1095a4
[dataflow-core] improve trace and robustness
MathiasPaulin Feb 1, 2023
cbc5f32
[dataflow-qtgui] improve robustness
MathiasPaulin Feb 1, 2023
9dd7b31
[dataflow-qtgui] add constraints on powerslider when available
MathiasPaulin Feb 1, 2023
fe8c591
[dataflow-core] improve NodeFactoriesManager interface
MathiasPaulin Feb 2, 2023
5c1e038
[unittests] update to use NodeFactoriesManager interface
MathiasPaulin Feb 2, 2023
1d51e7b
[examples] update to use NodeFactoriesManager interface
MathiasPaulin Feb 2, 2023
dd95895
[cmake] fix configuration issue for interface libraries on windows in…
MathiasPaulin Feb 2, 2023
ff09a82
[dataflow-core] fix double deletion problem
MathiasPaulin Feb 2, 2023
a364b93
[dataflow-core] fix memory leaks
MathiasPaulin Feb 2, 2023
000a0d7
[dataflow-core] remove compilation warning
MathiasPaulin Feb 2, 2023
3afc95b
[dataflow-core] improve error management
MathiasPaulin Feb 3, 2023
9b5f927
[unittests] improve coverage
MathiasPaulin Feb 3, 2023
dcebe95
[core] fix compilation warning
MathiasPaulin Feb 6, 2023
a55e2e9
[dataflow-core] fix compilation warning
MathiasPaulin Feb 6, 2023
02219a0
[dataflow-qtgui] fix compilation warning
MathiasPaulin Feb 6, 2023
4be73ad
[dataflow] use std::type_index instead of hash for port type management
MathiasPaulin Feb 6, 2023
2c7ae86
[dataflow] make Node's uuid generator private
MathiasPaulin Feb 6, 2023
66e7bcf
[core] add type demangler from typeindex
MathiasPaulin Feb 6, 2023
935e77b
[dataflow] add type demangler from typeindex
MathiasPaulin Feb 6, 2023
b5b880f
[unittests] add test on type demangler from typeindex
MathiasPaulin Feb 6, 2023
811b871
[core] add missing RA_CORE_API
MathiasPaulin Feb 6, 2023
d9a7879
[dataflow] add missing RA_DATAFLOW_API
MathiasPaulin Feb 6, 2023
493fa48
[core] fix typeutils on windows
MathiasPaulin Feb 6, 2023
23d3364
[core] fix merge conflicts
MathiasPaulin Mar 17, 2023
fddbb9a
[unittests] Simplify typeutils
MathiasPaulin Feb 8, 2023
6ae69dc
[dataflow-core] Simplify type demangler
MathiasPaulin Feb 8, 2023
7252078
[dataflow-core] fix missing methods
MathiasPaulin Feb 8, 2023
46a7aca
[dataflow-core] fix missing methods on graph
MathiasPaulin Feb 8, 2023
920991d
[dataflow-core] specialize some sources
MathiasPaulin Feb 8, 2023
14e41dc
[unittests] improve coverage
MathiasPaulin Feb 8, 2023
606317f
[dataflow-core] allows to access to a port through its name or index
MathiasPaulin Feb 10, 2023
b9a6b7a
[dataflow-core] simplify loading and json representation
MathiasPaulin Feb 10, 2023
45b39cd
[dataflow-core] modify default generated node creator functor
MathiasPaulin Feb 10, 2023
2c76058
[dataflow-qtgui] fix crash when ending graph edition session
MathiasPaulin Feb 10, 2023
73c5af4
[unittests] improve coverage for graph building and serialization
MathiasPaulin Feb 10, 2023
5464ed0
[dataflow-core] allows to force recompilation of a graph
MathiasPaulin Feb 10, 2023
40d026a
[unittests] update tests
MathiasPaulin Feb 10, 2023
e650df3
[dataflow-qtGui] use Radium log
MathiasPaulin Feb 10, 2023
4d4b14a
[dataflow-core] try to fix random crash : sinkNode
MathiasPaulin Feb 13, 2023
80a8859
[dataflow-core] try to fix random crash : Port
MathiasPaulin Feb 13, 2023
0875e21
[dataflow-core] try to fix random crash : Node
MathiasPaulin Feb 13, 2023
d4b57df
[dataflow-core] try to fix random crash : Graph
MathiasPaulin Feb 13, 2023
bbaa086
[unittests] try to fix random crash
MathiasPaulin Feb 13, 2023
20a704a
[unittest] try to fix random crash
MathiasPaulin Feb 13, 2023
81626a7
[dataflow] remove dependency from stduuid external
MathiasPaulin Feb 24, 2023
8102056
[dataflow-core][tests] improve Radium types demangler
MathiasPaulin Mar 20, 2023
736e44f
[dataflow-core][tests][examples] Node factory improvements
MathiasPaulin Mar 20, 2023
95643d0
[dataflow-core][dataflow-qtgui][tests] fix typos and profile for Data…
MathiasPaulin Mar 20, 2023
b4bb101
[tests] fix missing const in dataflow graph test
MathiasPaulin Mar 20, 2023
db189f7
[dataflow-qtgui] fix missing const in dataflow graph node access
MathiasPaulin Mar 20, 2023
a7a9879
[dataflow-core][tests] fix type demangler for __cxx11::basic_string o…
MathiasPaulin Mar 21, 2023
e8b5687
[gui] fix missing widget name
MathiasPaulin Mar 24, 2023
c3bd198
[dataflow-core] use find_if instead of custom loop
MathiasPaulin Mar 24, 2023
269dc91
[dataflow-qtgui] add widget
MathiasPaulin Mar 24, 2023
a872237
[dataflow-core] add a todo in Node.hpp
MathiasPaulin Apr 3, 2023
27d2e63
[dataflow-rendering] remove .inl in the Rendering package
MathiasPaulin Apr 4, 2023
924377b
[core] fix merge of Radium PR #1037
MathiasPaulin Apr 4, 2023
c7f9167
[engine] fix envmap computation when Scalar = double
MathiasPaulin Apr 4, 2023
8cfb030
[core][tests] fix Random sequences when Scalar = double
MathiasPaulin Apr 4, 2023
ba58eb6
[dataflow-rendering] fix codacy for unused component
MathiasPaulin Apr 4, 2023
94e6b98
[tests] fix random sequence when Scalar = double
MathiasPaulin Apr 4, 2023
26941c1
[general] format with new guidelines
pre-commit-ci[bot] Apr 5, 2023
89f89ff
[cmake][dataflow] update cmake min version to 3.18
MathiasPaulin Jun 30, 2023
3ccb3c8
[core] add random point sets
MathiasPaulin Sep 7, 2022
5f95dae
[core] fix compilation warning
MathiasPaulin Feb 6, 2023
ea1fdef
[core] improve type utilities : add type traits utility and fix type …
MathiasPaulin Oct 2, 2022
219a795
[core] improve type utilities : add type traits utility and fix type …
MathiasPaulin Oct 2, 2022
c8bc596
[dataflow][rendering] fix minimal dataflow renderer
MathiasPaulin Nov 3, 2022
8061346
[examples][dataflow] start rendering example
MathiasPaulin Nov 3, 2022
6b55071
[dataflow][rendering] add scene node and update renderer
MathiasPaulin Nov 3, 2022
3f0d086
[examples][dataflow] update rendering demo
MathiasPaulin Nov 3, 2022
1f77e4e
[dataflow][rendering] improve configurable renderer
MathiasPaulin Nov 3, 2022
4795899
[examples][dataflow] better comments in rendering example
MathiasPaulin Nov 3, 2022
d5ffbc2
[examples][dataflow] add rendering factory to the node editor
MathiasPaulin Nov 3, 2022
42bed33
[dataflow][rendering] start autoregistration of rendering nodes
MathiasPaulin Nov 3, 2022
065f9b1
[dataflow][rendering] move RenderingGraph class
MathiasPaulin Nov 3, 2022
ac52443
[dataflow][rendering] add texture sources and sink
MathiasPaulin Nov 3, 2022
0cf44ac
[examples][dataflow] add graph inspection in Graph rendering demo for…
MathiasPaulin Nov 3, 2022
6792eba
[dataflow][rendering] add new node and improve renderer/controller
MathiasPaulin Nov 3, 2022
cfe56c9
[examples][dataflow] extends Graph rendering demo
MathiasPaulin Nov 3, 2022
5e5467b
[dataflow][rendering] Separate RenderGraphController from Configurabl…
MathiasPaulin Nov 4, 2022
d810d3b
[examples][dataflow] update Graph rendering demo
MathiasPaulin Nov 4, 2022
ae69253
[dataflow][rendering] add simpleRenderNodes and allow resources path …
MathiasPaulin Nov 5, 2022
ce0f45e
[dataflow][rendering] compiling rendering graphs
MathiasPaulin Nov 7, 2022
3ae517e
[example][dataflow] modify rendering demo.
MathiasPaulin Nov 4, 2022
339e827
[dataflow][rendering] add environment map source node
MathiasPaulin Nov 5, 2022
22b7ac2
[dataflow][rendering] add geometry aovs node
MathiasPaulin Nov 5, 2022
53d4f7b
[dataflow][rendering] add emissivity node
MathiasPaulin Nov 5, 2022
3ff3dbb
[gui] automatically loads plugins from the directory specified on the…
MathiasPaulin Nov 6, 2022
8fe7af4
[engine] add sphere sampler, spherical random point sets mapped to a …
MathiasPaulin Nov 6, 2022
10a09b2
[dataflow][rendering] doc clearcolorNode
MathiasPaulin Nov 6, 2022
7fbfd1d
[dataflow][qtgui] Add a todo (to be moved in RadiumDataflow PR)
MathiasPaulin Nov 7, 2022
5919511
[examples][dataflow] Add geom aov to the basic graph rendering example
MathiasPaulin Nov 7, 2022
40d5a70
[dataflow][rendering] add ssao node
MathiasPaulin Nov 7, 2022
6fadce5
[dataflow][rendering] update wrt dataflow core and remove .inl files
MathiasPaulin Jan 31, 2023
e4dfbf1
[dataflow][examples][rendering] update wrt dataflow core
MathiasPaulin Jan 31, 2023
d6763bf
[dataflow][rendering] remove warnings and add missing header (windows)
MathiasPaulin Feb 1, 2023
ccbb23a
[dataflow][rendering] add environment lighting node
MathiasPaulin Feb 1, 2023
eab8d28
[dataflow][rendering] add local lighting node
MathiasPaulin Feb 1, 2023
4febaaf
[dataflow][rendering] fix window compilation.
MathiasPaulin Feb 1, 2023
e178faa
[dataflow][rendering] add TransparencyNode.
MathiasPaulin Feb 1, 2023
4975c48
[dataflow][rendering] add VolumeNode.
MathiasPaulin Feb 1, 2023
6ee973e
[dataflow][rendering] add WireframeNode.
MathiasPaulin Feb 1, 2023
bc41fb0
[dataflow][rendering] fix envmap shader for non PBR materials.
MathiasPaulin Feb 1, 2023
c372a89
[dataflow][rendering] improve node and ports naming
MathiasPaulin Feb 1, 2023
3657d6c
[dataflow][rendering] update to editable constraint
MathiasPaulin Feb 1, 2023
b470e63
[dataflow][rendering] add constraints on ssao node parameters
MathiasPaulin Feb 1, 2023
df96d3c
[dataflow][rendering] add antialiasing
MathiasPaulin Feb 1, 2023
37107c6
[dataflow][rendering] remove redundant method
MathiasPaulin Feb 1, 2023
64fece2
[dataflow][engine] update to factories manager interface
MathiasPaulin Feb 2, 2023
9444c72
[dataflow][engine] homogenize port naming
MathiasPaulin Feb 2, 2023
e5f71cc
[dataflow][rendering] fix crash when executing GraphRendering app on …
MathiasPaulin Feb 2, 2023
d243e5c
[dataflow][qtgui] fix crash when executing GraphRendering app on Linux
MathiasPaulin Feb 2, 2023
858e470
[examples][dataflow] fix codacy warning
MathiasPaulin Feb 3, 2023
ca90f7b
[unittests][dataflow] add rendering graph unittests
MathiasPaulin Feb 3, 2023
35cb1ec
[unittests][dataflowrendering] fix segfault on Linux
MathiasPaulin Feb 3, 2023
67ba8f2
[dataflow][rendering] update to dataflow core evolution
MathiasPaulin Feb 10, 2023
a968f6d
[dataflow][rendering] update rendering example
MathiasPaulin Feb 10, 2023
2eb84ca
[dataflow][rendering] update rendering example
MathiasPaulin Feb 10, 2023
96f167e
[dataflow-rendering] adapt to renderparameter PR
MathiasPaulin Mar 17, 2023
fab1e45
[examples] add support for libGLTF for graph-base rendering exemple
MathiasPaulin Mar 17, 2023
9d38602
[dataflow-rendering][tests][examples] fix missing const in dataflow g…
MathiasPaulin Mar 20, 2023
603f541
[engine] allow to set alpha to 0 or 1 (the default) when drawing skybox
MathiasPaulin Mar 22, 2023
42844e8
[dataflow-rendering-shaders] add missing ouput in no-light vertex shader
MathiasPaulin Mar 22, 2023
107d782
[dataflow-rendering] update shader code for envlighting
MathiasPaulin Mar 24, 2023
263c352
[dataflow-rendering] allow using rendering node in any order
MathiasPaulin Mar 24, 2023
5a91f03
[core] fix strange code duplication
MathiasPaulin Apr 3, 2023
d7c6d0f
[rendering] improve envmap shader for non PBR path
MathiasPaulin Apr 4, 2023
37f1fe8
[rendering] remove unsed file
MathiasPaulin Apr 5, 2023
a4a355f
[dataflow-rendering] Simplify Display Sink
MathiasPaulin Apr 5, 2023
52a920d
[dataflow-rendering] Allows ClearColor to serve its own Beaty texture
MathiasPaulin Apr 5, 2023
cdea886
[general] format with new guidelines
pre-commit-ci[bot] Apr 5, 2023
6249e73
[dataflow-rendering] fix merge error
MathiasPaulin Apr 7, 2023
d24cd02
[examples] improve dataflow-rendering demo
MathiasPaulin Apr 7, 2023
66c36f9
[cmake][dataflow] update cmake min version to 3.18
MathiasPaulin Jun 30, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ option(RADIUM_GENERATE_LIB_ENGINE "Include Radium::Engine in CMake project." ON)
option(RADIUM_GENERATE_LIB_GUI "Include Radium::Gui in CMake project." ON)
option(RADIUM_GENERATE_LIB_PLUGINBASE "Include Radium::PluginBase in CMake project." ON)
option(RADIUM_GENERATE_LIB_HEADLESS "Include Radium::Headless in CMake project." ON)
option(RADIUM_GENERATE_LIB_DATAFLOW "Include Radium::Dataflow* in CMake project." ON)
option(
RADIUM_UPDATE_VERSION
"Update version file each time the project is compiled (update compilation time in version.cpp)."
Expand Down Expand Up @@ -290,6 +291,7 @@ message_setting("RADIUM_GENERATE_LIB_CORE")
message_setting("RADIUM_GENERATE_LIB_ENGINE")
message_setting("RADIUM_GENERATE_LIB_GUI")
message_setting("RADIUM_GENERATE_LIB_HEADLESS")
message_setting("RADIUM_GENERATE_LIB_DATAFLOW")
message_setting("RADIUM_GENERATE_LIB_IO")
message_setting("RADIUM_GENERATE_LIB_PLUGINBASE")
string(REPLACE ";" " " COMPONENTS_LIST "${RADIUM_COMPONENTS}")
Expand Down
21 changes: 15 additions & 6 deletions cmake/RadiumSetupFunctions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -966,18 +966,27 @@ function(configure_radium_library)
# add the cmake command to install target
add_custom_install_target(${ARGS_TARGET})

get_target_property(TargetType ${ARGS_TARGET} TYPE)
if(TargetType STREQUAL INTERFACE_LIBRARY)
set(PropertyQualifier INTERFACE)
else()
set(PropertyQualifier PUBLIC)
target_compile_definitions(${ARGS_TARGET} PRIVATE ${ARGS_TARGET}_EXPORTS)
endif()

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
target_compile_definitions(${ARGS_TARGET} PUBLIC _DEBUG)
if(MSVC OR MSVC_IDE)
target_compile_definitions(${ARGS_TARGET} ${PropertyQualifier} _DEBUG)
if((MSVC OR MSVC_IDE) AND NOT (TargetType STREQUAL INTERFACE_LIBRARY))
install(FILES $<TARGET_PDB_FILE:${ARGS_TARGET}> DESTINATION bin)
endif()
endif()
target_compile_features(${ARGS_TARGET} PUBLIC cxx_std_17)

target_compile_features(${ARGS_TARGET} ${PropertyQualifier} cxx_std_17)
if(OPENMP_FOUND)
target_link_libraries(${ARGS_TARGET} PUBLIC OpenMP::OpenMP_CXX)
target_link_libraries(${ARGS_TARGET} ${PropertyQualifier} OpenMP::OpenMP_CXX)
endif(OPENMP_FOUND)
target_compile_definitions(${ARGS_TARGET} PRIVATE ${ARGS_TARGET}_EXPORTS)
target_include_directories(${ARGS_TARGET} PUBLIC $<INSTALL_INTERFACE:include/>)
target_include_directories(${ARGS_TARGET} ${PropertyQualifier} $<INSTALL_INTERFACE:include/>)

add_library(${ARGS_NAMESPACE}::${ARGS_TARGET} ALIAS ${ARGS_TARGET})

install(
Expand Down
5 changes: 5 additions & 0 deletions doc/basics/dependencies.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Radium relies on several external libraries to load files or to represent some d
* [Engine] glm, globjects, glbindings, tinyEXR
* [IO] Assimp
* [Gui] Qt Core, Qt Widgets and Qt OpenGL v5.5+ (5.14 at least, Qt6 support is experimental), PowerSlider
* [Dataflow] RadiumNodeEditor
* [doc] Doxygen-awesome-css
* stb_image

Expand Down Expand Up @@ -100,6 +101,7 @@ set(tinyEXR_DIR "/path/to/external/install/share/tinyEXR/cmake/" CACHE PATH "My
set(assimp_DIR "/path/to/external/install/lib/cmake/assimp-5.0/" CACHE PATH "My assimp location")
set(tinyply_DIR "/path/to/external/install/lib/cmake/tinyply/" CACHE PATH "My tinyply location")
set(PowerSlider_DIR "/path/to/external/install/lib/cmake/PowerSlider/" CACHE PATH "My PowerSlider location")
set(RadiumNodeEditor_DIR "/path/to/external/install/lib/cmake/RadiumNodeEditor/" CACHE PATH "My NodeEditor")
set(RADIUM_IO_ASSIMP ON CACHE BOOL "Radium uses assimp io")
set(RADIUM_IO_TINYPLY ON CACHE BOOL "Radium uses tinyply io")
~~~
Expand All @@ -122,6 +124,7 @@ To this end, just provide the corresponding '*_DIR' to cmake at configuration ti
Currently supported (note that these paths must refer to the installation directory of the corresponding library):
<!-- (generated running ../script/list_dep.py from Radium-Engine/external directory) -->

* `RadiumNodeEditor_DIR`
* `assimp_DIR`
* `tinyply_DIR`
* `PowerSlider_DIR`
Expand All @@ -137,6 +140,8 @@ Currently supported (note that these paths must refer to the installation direct

Radium is compiled and tested with specific version of dependencies, as given in the external's folder CMakeLists.txt and state here for the record

* RadiumNodeEditor: https://github.com/MathiasPaulin/RadiumQtNodeEditor.git, [main],
* with options `None`
* assimp: https://github.com/assimp/assimp.git, [tags/v5.0.1],
* with options `-DASSIMP_BUILD_ASSIMP_TOOLS=False -DASSIMP_BUILD_SAMPLES=False -DASSIMP_BUILD_TESTS=False -DIGNORE_GIT_HASH=True -DASSIMP_NO_EXPORT=True`
* tinyply: https://github.com/ddiakopoulos/tinyply.git, [tags/2.3.2],
Expand Down
1 change: 1 addition & 0 deletions doc/concepts.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@
* \subpage eventSystem
* \subpage pluginSystem
* \subpage forwardRenderer
* \subpage nodeSystem
71 changes: 71 additions & 0 deletions doc/concepts/dataflow/HelloGraph.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
{
"instance": "helloGraph",
"model": {
"graph": {
"connections": [
{
"in_node": "Filter",
"in_port": "in",
"out_node": "Source",
"out_port": "to"
},
{
"in_node": "Filter",
"in_port": "f",
"out_node": "Selector",
"out_port": "f"
},
{
"in_node": "Sink",
"in_port": "from",
"out_node": "Filter",
"out_port": "out"
}
],
"factories": [],
"nodes": [
{
"instance": "Source",
"model": {
"name": "Source<RaVector<float>>"
},
"position": {
"x": -195.0,
"y": -82.0
}
},
{
"instance": "Selector",
"model": {
"name": "Source<function<bool (float const&)>>"
},
"position": {
"x": -279.0,
"y": 35.0
}
},
{
"instance": "Filter",
"model": {
"name": "Filter<RaVector<float>>"
},
"position": {
"x": 44.0,
"y": -45.0
}
},
{
"instance": "Sink",
"model": {
"name": "Sink<RaVector<float>>"
},
"position": {
"x": 267.0,
"y": 12.0
}
}
]
},
"name": "Core DataflowGraph"
}
}
199 changes: 199 additions & 0 deletions doc/concepts/nodesystem.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
\page nodeSystem Radium node system
[TOC]

# Radium node system

Radium-Engine embed a node system allowing to develop computation graph using an adaptation of dataflow programming.
This documentation explain the concepts used in the node system and how to develop computation graph using the Core
node system and how to extend the Core node system to be used in specific Radium-Engine application or library.

## Structure and usage of the Radium::Dataflow component

When building the Radium-Engine libraries, the node system is available from the Radium::Dataflow component.
The availability of this component in the set of built/installed libraries is managed using the
`RADIUM_GENERATE_LIB_DATAFLOW` cmake option (set to `ON` by default) of the main Radium-Engine CMakeLists.txt.

The Radium::Dataflow component is a header-only library with is linked against three sub-components :

- **DataflowCore** library defining the Core node system and a set Core Nodes allowing to develop several computation
graph.
- **DataflowQtGui** library defining Qt based Gui elements to edit and interact with a computation graph.
- **DataflowRendering** library defining specific nodes to be used by a Graph-based renderer allowing to easily define
custom renderers.

When defining the CMakeLists.txt configuration file for an application/library that will build upon the node system,
The RadiumDataflow component might be requested in several way :

- `find_package(Radium REQUIRED COMPONENTS Dataflow)`. This will define the imported target `Radium::Dataflow` that
gives access to all the available sub-components at once but also through imported targets `Radium::DataflowCore`,
`Radium::DataflowQtGui` and `Radium::DataflowRendering`.
- `find_package(Radium REQUIRED COMPONENTS DataflowCore)`. This will define the imported target `Radium::DataflowCore`
only.
- `find_package(Radium REQUIRED COMPONENTS DataflowQtGui)`. This will define the imported target `Radium::DataflowQtGui`
only, with transitive dependencies on `Radium::DataflowCore`.
- `find_package(Radium REQUIRED COMPONENTS DataflowRendering)`. This will define the imported target
`Radium::DataflowRendering` only, with transitive dependencies on `Radium::DataflowCore`.

The targets that depends on a Dataflow components should then be configured as any target and linked against the
requested dataflow component, by, e.g, adding the line
`target_link_libraries(target_name PUBLIC Radium::Dataflow)` (or the only needed subcomponent).

## Concepts of the node system

The node system allow to build computation graph that takes its input from some _data source_ and store their results
in some _data sink_ after applying several _functions_ on the data.

Computation graphs can be serialized and un-serialized in json format. The serialization process is nevertheless limited
to serializable data stored on the node and it is of the responsibility of the application to manage non serializable
data such as, e.g. anonymous functions (lambdas, functors, ...) dynamically defined by the application.

The Radium node system relies on the following concepts

- _Node_ (see Ra::Dataflow::Core::Node for reference manual) : a node represent a function that will be executed on
several strongly typed input data, defining the definition domain of the function, to produce some strongly typed
output data, defining the definition co-domain of the function.

The input and output data are accessed through _ports_ allowing to connect nodes together to form a graph.

The node profile is implicitly defined by its domain and co-domain.

A node can be specialized to be a _data source_ node (empty domain) or a _data sink_ node (empty co-domain).
These specific nodes define the input and output of a complex _computation graph_

- _Port_ (see Ra::Dataflow::Core::PortBase for reference manual) : a port represent an element of the node
profile and allow to build the computation graph by linking ports together, implicitly defining _links_.

A port gives access to a strongly typed data and, while implementing the general Ra::Dataflow::Core::PortBase
interface should be specialized to be either an input port (element of the definition domain of a node) through the
instancing of the template Ra::Dataflow::Core::PortIn or to an output port (element of the definition
co-domain of a node) through the instancing of the template Ra::Dataflow::Core::PortOut.

When a node executes its function, it takes its parameter from its input ports and set the result on the output port.

An output port can be connected to an input port of the same _DataType_ to build the computation graph.
- _Graph_ (see Ra::Dataflow::Core::DataflowGraph for reference manual) : a graph is a set of node connected through
their ports so that they define a direct acyclic graph (DAG) representing a complex function. The DAG represents
connections from some _data source_ nodes to some _data sink_ nodes through

Once built by adding nodes and links, a graph should be _compiled_ so that the system verify its validity
(DAG, types, connections, ...).

Once compiled, a graph can be _executed_.
The input data of the computation graph should be set on the available _data sources_ of the graph and the results
fetched from the _data sinks_.

As a graph can be used as a node (a sub graph) in any other graph. When doing this, all _data sources_ and
_data sinks_ nodes are associated with _interface ports_ and these interface ports are added as _input_ or _output_
ports on the graph so that links can be defined using these ports.

_input_ and _output_ ports of a graph can also be accessed directly from the application using _data setters_ and
_data getters_ fetched from the graph. These _data setters_ and _data getters_ allows to use any graph without the
need to know explicitly their _data sources_ and _data sinks_ nor defining ports to be linked with the _input_ and
_output_ ports of the graph.

- _Factories_ (see Ra::Dataflow::Core::NodeFactoriesManager for reference manual) : the serialization of a graph output
a set of json object describing the graph. If serialization is always possible, care must be taken for the system to
manage un-serilization of any nodes.

When serializing a graph, the json representing a node contains the type (the name of the concrete C++ class) of the
node and several other properties of the node system. When un-serializing a graph, nodes will be automatically
instanced from their type.
The instantiation of a node is made using services offered by node factories and associated to the node type. So, in
order to be un-serializable, each node must register its type to a factory and each graph must refer to the factories used
to instantiate its node.

## HelloGraph : your first program that uses the node system

The example application examples/HelloGraph shows how to define a computation graph to apply filtering on a collection.
In this example, whose code is detailed below, the following graph is built and executed using different input data.

![HelloGraph computation graph](images/HelloGraph.png)

This graphs has two inputs, corresponding to the two **Source< ... >** nodes. These input will deliver to the
computation graph :

- from a Ra::Dataflow::Core::Sources::SingleDataSourceNode, a vector of scalars, whose container type is
Ra::Core::VectorArray (abridged here as a RaVector) and value type is _Scalar_ (float in the default Radium-Engine
configuration),
- from a Ra::Dataflow::Core::Sources::FunctionSourceNode a predicate whose type is _std::function<bool(float const&)>_
which returns _true_ if its parameter is valid according to some decision process.

These two _sources_ are linked to the input of a Ra::Dataflow::Core::Functionals::FilterNode, here represented by the
**Filter< ... >** node. This node select from its **in** input only the values validated by the predicate **f** and
built its output **out** with these values.

The result of this filtering is linked to the graph output, corresponding to the Ra::Dataflow::Core::Sinks::SinkNode
**Sink< ... >**.

Once the graph is built and compile, the HelloGraph application sent different input to the graph and print the result
of the computation.

To develop such an application, the following should be done

### 1. Building and inspecting the graph

First, an object of type Ra::Dataflow::Core::DataflowGraph is instanced :
\snippet examples/DataflowExamples/HelloGraph/main.cpp Creating an empty graph

Then, the nodes are instanced
\snippet examples/DataflowExamples/HelloGraph/main.cpp Creating Nodes

and added to the graph
\snippet examples/DataflowExamples/HelloGraph/main.cpp Adding Nodes to the graph

Links between ports are added to the graph, and if an error is detected, due to e.g. port type incompatiblitiy, it is
reported
\snippet examples/DataflowExamples/HelloGraph/main.cpp Creating links between Nodes

Once the graph is built, it can be inspected using dedicated methods.
\snippet examples/DataflowExamples/HelloGraph/main.cpp Inspect the graph interface : inputs and outputs port

For the graph constructed above, this prints on stdout

```text
Input ports (2) are :
"Selector_f" accepting type function<bool (float const&)>
"Source_to" accepting type RaVector<float>
Output ports (1) are :
"Sink_from" generating type RaVector<float>
```

### 2. Compiling the graph and getting input/output accessors

In order to use the graph as a function acting on its input, it should be first compiled by
\snippet examples/DataflowExamples/HelloGraph/main.cpp Verifying the graph can be compiled

If the compilation success the accessors for the input data and the output result might be fetched from the graph
\snippet examples/DataflowExamples/HelloGraph/main.cpp Configure the interface ports (input and output of the graph)

Here, the accessor `input` allows to set the pointer on the `RaVector` to be processed while the accessor `selector`
allows to set the predicate to evaluate when filtering the collection. This predicates select values les than `0.5`

The accessor `output` will allow, once the graph is executed, to get a reference to or to copy the resulting values.

### 3. Executing the graph

Once the input data are available (in this example, the `test` vector is filled with 10 random values between 0 and 1),
the graph can be executed and a reference to the resulting vector can be fetched using
\snippet examples/DataflowExamples/HelloGraph/main.cpp Execute the graph

### 4. Multiple run of the graph on different input

As accessors use pointers and references on the data sent to / fetched from the graph, the HelloGraph example shows how
to change the input using different available means so that every run of the graph process different values.
See the file examples/DataflowExamples/HelloGraph/main.cpp for all the details.

## Examples of graphs and of programming custom nodes

The unittests developed alongside the Radium::Dataflow component, and located in the directory
`tests/unittest/Dataflow/` of the Radium-Engine source tree, can be used to learn the following :

- sourcesandsinks.cpp : demonstrate the default supported types for sources and sinks node.
- nodes.cpp : demonstrate the development of a more complex graph implementing transform/reduce
on several collections using different reduction operators.
- graphinspect.cpp : demonstrate the way a graph can be inspected to discover its structure.
- serialization.cpp : demonstrate how to save/load a graph from a json file and use it in an
application.
- customnodes.cpp : demonstrate how it is simple to develop your own node type (in C++) and
use your nodes alongside standard nodes.
\snippet unittest/Dataflow/customnodes.cpp Develop a custom node
Binary file added doc/images/HelloGraph.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions examples/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ foreach(
APP
CoreExample
CustomCameraManipulator
DataflowExamples
DrawPrimitives
EntityAnimation
EnvMap
Expand Down
12 changes: 12 additions & 0 deletions examples/DataflowExamples/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
cmake_minimum_required(VERSION 3.18)
cmake_policy(SET CMP0042 NEW)

project(DataflowExamples VERSION 1.0.0)

add_custom_target(${PROJECT_NAME})
add_custom_target(Install_${PROJECT_NAME})
foreach(APP GraphSerialization HelloGraph GraphEditor FunctionalsGraph GraphRendering)
add_subdirectory(${APP})
add_dependencies(${PROJECT_NAME} ${APP})
add_dependencies(Install_${PROJECT_NAME} Install_${APP})
endforeach()
Loading
Loading