Commit graph

7007 commits

Author SHA1 Message Date
ab2a363653 clean-up: remove the GCH builder from the SCons tools
`BuilderGCH` was added as an experimental feature many years ago;
this is code found ''somewhere'' on the net and was use ''as-is'' —
however, precompiled headers turned out as a feature of GCC with
a lot of quality problems and, furthermore seems of questionable
usability — we thus decided to adhere strictly to the »Borland model«
of template instantiation and recommend against using precompiled headers.

Rather, in the Lumiera code base, much care is taken to avoid unnecessary
header includes — this, together with the incremental build feature of SCons
largely obsoletes the necessity to resort to precompiled headers and
similar facilities (as CCache).
2025-09-19 19:51:28 +02:00
8dc6580da1 clean-up: update links embedded into API-doc (Doxygen)
Notably some links on the **Gnome documentation** pages are problematic,
since there was seemingly an infrastructure change -- which unfortunately
leads to loosing several deep-links into the GTK-3 related documentation
and tutorials.

While the differences to GTK-4 are often rather minimal, I would still prefer
to link to those documentation pages used as reference at implementation time
of our related library and GUI functionality.

In several cases I have thus looked up the old URLs at Archive.org
2025-09-19 19:51:28 +02:00
0c3cd9027c DOC: clarify UI / discussion
- indicate clearly that a ''past discussion'' is documented here
- point out what is the primary focus for UI design ''currently''
- arrange some links better
- use cross-links / Linkfarm; especially cross-link to
  the discussion regarding Wouter's Workflow proposals (2025)
2025-09-19 19:51:28 +02:00
217ec447c0 DOC: reorganise time handling pages (use Linkfarm)
Create a new subcategory "design/architecture/time"
and rearrange several pages related to time handling and time codes.

NOTE: starting with this changeset, a ''Link-Farm'' is required for cross-links;
since we don't have an automatic solution for this task yet, I have created
the necessary forwarding pages manually in the website repository.
2025-09-19 19:34:27 +02:00
25eb6a61e3 clean-up: link maintenance
- use HTTPS
- avoid redirects
- supply Archive.org snapshots for old resources
2025-09-19 19:34:27 +02:00
643779c4a2 Review: integrate Christian's improvements to the website build
Christian started a series of reworks in 2018;
the result was considered experimental and was parked on website-staging ever since.

As part of the current release- and clean-up activities I now reviewed
and integrated those changes into the current website as far as applicable.
2025-09-02 02:20:39 +02:00
Christian Thäter
060cbae2cd DOC: Server and Mailinglists 2025-09-02 02:03:24 +02:00
9225d868bb DOC: Notes regarding the ongoing workflow-discussion 2025-08-31 01:02:49 +02:00
43a9036c0d Workflow-publish: minor layout tweaks and spelling fixes 2025-08-31 00:48:44 +02:00
537c89298b DOC: FrOSCon meeting -- additions and corrections as proposed by Wouter 2025-08-31 00:47:39 +02:00
592622d750 Workflow-publish: adapt additions to Asciidoc 2025-08-23 18:50:13 +02:00
Wouter Verwijlen
f6427474ad Workflow-discussion: Lumiera Workflow Proposals (draft v3)
...fine-tuned a few small bits here and there in the
   current chapter of the workflow document

===========================================================
Remark from Ichthyo(committer):

Converted from PDF to raw text with

    pdftotext wouter250819v3.pdf WorkflowProposals.txt

Images extracted with:

    pdfimages -png -j wouter250819v3.pdf wouter/wouter250819v3

Again adding the images separately to the Website-repository,
in order to save storage space in the main repository....
2025-08-23 17:55:42 +02:00
4dba1c816d DOC: FrOSCon meeting -- integrate improvements from Benny 2025-08-23 04:29:08 +02:00
4eb24220c9 DOC: FrOSCon meeting -- minor fixes and cross-links 2025-08-23 03:37:08 +02:00
6a42606c3a Workflow-publish: adapt additions to Asciidoc
- add markup to match formatting from PDF
- link to the images extracted into the website Git-repository
- adjust image sizes to fit into the text
- add some cross references

(incidentally: TimelineDiscussion.txt -- store image locally)
2025-08-23 01:55:23 +02:00
Wouter Verwijlen
68633de53b Workflow-discussion: Lumiera Workflow Proposals (draft v2)
Chapter 2 (about the timeline) is now complete.
- extend discussion regarding trackless
- add section about Tools / Modes / Views
- section: Adding clips to the timeline
- section: Selecting clips
- section: Arranging clips
- section: Trimming clips
- section: Splitting and merging clips
- section: Removing clips
- add subchapter regarding sections of the timeline
- Adding and editing transitions
- Changing timeline clip properties

===========================================================
Remark from Ichthyo(committer):

Converted from PDF to raw text with

    pdftotext wouter250629v2.pdf WorkflowProposals.txt

Images extracted with

    pdfimages -png -j wouter250629v2.pdf wouter/wouter250629v2

Images required no cropping;
the white background images were omitted.

Again adding the images separately to the Website-repository,
in order to save storage space in the main repository....
2025-08-22 16:42:55 +02:00
262fe7f3bb Workflow-publish: rewrite the text from Wouter into Asciidoc 2025-08-22 01:55:50 +02:00
Wouter Verwijlen
a2890a627f Workflow-discussion: Lumiera Workflow Proposals (draft v1)
This is the version from 4.Apr
 - add a subchapter about the current NLE landscape
 - add a subchapter on tracks vs. trackless
 - add a bit more information in the navigation subchapter.
===========================================================
Remark from Ichthyo(committer):

Converted from PDF to raw text with

pdftotext wouter250404v1.pdf WorkflowProposals.txt

Images extracted with

pdfimages -png wouter250404v1.pdf

...and then cropped in Gimp ("crop to content");
images 06 and 11 needed to be split in two parts
cropped in Gimp ("crop to content")

NOTE: Adding the images separately to the Website-repository,
      in order to save storage space in the main repository,
      because content, once added, can not be removed from Git....
2025-08-22 00:23:42 +02:00
a021fe1189 DOC: rework the "Target audience" and add an overall conclusion
- included the list of "Personas", quoting from Wouter's document
- add some details from the ensuing discussion
- close the document with a section "Conclusions" to list the
  most relevant open points
2025-08-21 21:26:21 +02:00
e2d9fea710 DOC: Add section "Target audience"
TODO the ordered list of target groups. I didn't have a list of all target
groups and their priority, so please provide the list somebody.
2025-08-21 21:26:21 +02:00
eb887706e5 DOC: minutes (continued...) 2025-08-21 21:26:21 +02:00
7bbb21a8ad DOC: minutes of FrOSCon meeting
Topic: proposals for Lumiera Workflow
Present:
- Wouter Verweijlen
- Benny Lyons
- Hermann Voßeler

Note: This commit creates a new subsection
      for the discussion related to Wouter's »Lumiera Workflow Proposals«....
2025-08-19 15:15:36 +02:00
7e8a8a5b76 Recherche / preparation for FrOSCon talk
The topic of this talk was ''Video output from a Linux desktop application''
after extended research we built a demo application in four flavours
(XVideo, SDL, OpenGL legacy / modern).

This research project was set off by our immediate needs for a setup
to show computed video pixel data in a viewer window in the GUI; the
investigated technologies should work at present and in the near term
future (yet leaving out Vulkan and Wayland)
2025-08-21 00:39:51 +02:00
6c079839c2 Release: version of upcoming release -- with Git-flow
Starting with ''preview release'' `v0.pre.04`, branch and version tags
will be handled in accordance to the **Git-flow** naming scheme.
Notably this implies that from now on the version in-tree will indicate
the ''next expected release,'' adorned by a suffix to mark the preview.

To accommodate this transition to Git-flow
- the new branch `integration` will be introduced
- the version number will once (and the last time for this release)
  be adjusted ''before'' forking the release branch
- branch `master` will transition to reflect the latest released state
- several existing branches will be discontinued, notably
  `gui`, `steam`, `vault`, `release`, `play`
2025-07-21 03:23:45 +02:00
17ee3ac1cb Release: Introduce the Git-flow branching model
Starting with the upcoming ''preview release'', branches, branch names and tags
will be rearranged to follow the Git-flow pattern instead of the existing
ad-hoc organisation with a release branch.

The documentation provided here defines the actual naming conventions
and some fine points regarding the version number upgrades
and placement of release tags.


Furthermore, two helper-scripts are provided to automate version number updates
- `buildVersion.py` : extract current version from git tag and allow to bump version
- `setVersion` : manipulate all relevant files with `sed` to update the version info
2025-07-21 02:46:28 +02:00
20f3252892 Upgrade: down with typename!!
Yet another chainsaw massacre.

One of the most obnoxious annoyances with C++ metaprogramming
is the need to insert `typename` and `template` qualifiers into
most definitions, to help the compiler to cope with the syntax,
which is not context-free.

The recent standards adds several clarifications, so that most
of these qualifiers are redundant now, at least at places where
it is unambiguously clear that only a type can be given.

GCC already supports most of these relaxing rules
(Clang unfortunately lags way behind with support of newer language features...)
2025-07-06 01:19:08 +02:00
2cd3e95228 Upgrade: simplify Either-type
`lib::Result` can invoke, capture the result and thereby
represent ''either'' a result or a failure.

The old implementation required a delegate, due to the complexities
of integrating the `void` case. With C++23, `invoke_r` from the Stdlib
handles those issues, allowing a cleaner formulation, with directly
capturing the result into `lib::ItemWrapper`
2025-07-04 21:27:50 +02:00
b6a39fa831 Upgrade: simplify comparisons
Now able to remove most complicated comparison operators and most usages of boost::operators...
In most cases it is sufficient just to define one ''spaceship operator'',
and often even that one can be synthesised.

However — we still use boost::operators for arithmetic types,
notably the `lib::time::TimeValue`, which is addable and mutipliable
2025-07-04 03:37:54 +02:00
bad4827b34 Upgrade: Literal can be constexpr
Only minor rearrangements necessary to make that possible with C++20
And while at this change (which requires a full rebuild of Lumiera)

- simplify the defined comparison operators, as C++20 can infer most variations
- also mark various usages of `const char*` either as Literal or CStr

Remark: regarding copyright, up to now this is entirely my work,
        with two major creation steps in 2008 (conception) and
        in 2017 (introduction of a symbol table)
2025-07-02 22:18:39 +02:00
170b68ac5c Upgrade: further extend usage of the tuple_like concept + generic apply
This changeset removes various heuristics and marker-traits
by a constraint to tuple_like types. Furthermore, several usages
of `apply` can thereby be generalised to work on any tuple_like.

This generalisation is essential for the passing generic data blocks
via `FeedManifold` into the node invocation
2025-07-02 01:16:08 +02:00
3a5bbd8fb4 Upgrade: put the new tuple_like concept into use
- integrate the concept definition into tuple-helper.hpp
- use it to replace the `is_Structured` traits check
- do not need `enable_if_TupleProtocol` any more

Integrate test coverage of the concept metafunctions
and the generalised get accessor

''This changeset was made at LAC 2025 in Lyon, France''
2025-06-28 00:42:23 +02:00
3a1f64ec41 Upgrade: now able to reformulate the tuple_like concept
Now this draft seems ready to be put into actual use in the code base.
Furthermore, a generic ''get adapter'' is introduced to level the difference
between both tolerated forms of element access, also working correctly
for const and RValue references
2025-06-24 01:03:57 +02:00
bb0b73e2a7 Upgrade: switch existing usages of forEachIDX
...to rely on the new formulation and the extended template `WithIdxSeq`

This is in preparation to use this new iteration scheme also from the tuple_like concept
2025-06-23 22:59:37 +02:00
49e7b31511 Upgrade: develop better formulation for ''and-all-generic''
...need to do this in a test context first,
since `variadic-helper` is in widespread use
2025-06-23 04:24:00 +02:00
7d461adabc Upgrade: explore construction of a ''tuple-like'' concept
Motivated by the difficulties encountered with `std::apply` —
which basically forced us to define our own alternative with
conceptually more adequate limitations....

...so these are the first attempts towards building a C++20 concept.
2025-06-22 19:42:03 +02:00
de066348af Upgrade: workaround for compiler-bug
Compilation failure with GCC-14.2 with the following code

class Base
  {
  protected:
    Base() = default;
  };

struct Feed
  : Base
  { };

int
main (int, char**)
  {
    Feed f1;
//  Feed f2{};       /// does not compile with GCC 14.2
    return 0;
  }

In the actual code base this can be triggered when instantiating
classes with the `NonCopyable`-mix-in; seemingly the compiler attempts
to invoke the base class ctor directly, while it should invoke a
(synthesised) default ctor for the derived class.

The problem could not be reproduced with other compiler versions at Godbolt.org
2025-06-20 18:29:51 +02:00
afa7ca2e4d Upgrade: switch to C++23 (see #1245)
The Lumiera »Reference Platform« is now upgraded to Debian/Buster, which provides GCC-14 and Clang-20.
Thus the compiler support for C++20 language features seems solid enough, and C++23,
while still in ''experimental stage'' can be seen as a complement and addendum.

This changeset
 * upgrades the compile switches for the build system
 * provides all the necessary adjustments to keep the code base compilable

Notable changes:
 * λ-capture by value now requires explicit qualification how to handle `this`
 * comparison operators are now handled transparently by the core language,
   largely obsoleting boost::operators. This change incurs several changes
   to implicit handling rules and causes lots of ambiguities — which typically
   pinpoint some long standing design issues, especially related to MObjects
   and the ''time entities''. Most tweaks done here can be ''considered preliminary''
 * unfortunately the upgraded standard ''fails'' to handle **tuple-like** entities
   in a satisfactory way — rather an ''exposition-only'' concept is introduced,
   which applies solely to some containers from the STL, thereby breaking some
   very crucial code in the render entities, which was built upon the notion of
   ''tuple-like'' entities and the ''tuple protocol''. The solution is to
   abandon the STL in this respect and **provide an alternative implementation**
   of the `apply` function and related elements.
2025-06-19 01:52:55 +02:00
d888891d84 clean-up: trifles 2025-06-07 23:59:57 +02:00
20392eee1c clean-up: successfully replaced the old fixed type sequence (closes: #987)
This resolves an intricate problem related to metaprogramming with
variadic templates and function signatures. Due to exceptional complexity,
a direct solution was blocked for several years, and required a better
organisation of the support code involved; several workarounds were
developed, gradually leading to a transition path, which could now
be completed in an focused clean-up effort over the last week.

Metaprogramming with sequences of types is organised into three layers:
- simple tasks can be solved with the standard facilities of the language,
  using pattern match with variadic template specialisations
- the ''type-sequence'' construct `Types<T...>` takes the centre stage
  for the explicit definition of collections of types; it can be re-bound
  to other variadic templates and supports simple direct manipulation
- for more elaborate and advanced processing tasks, a ''Loki-style type list''
  can be obtained from a type-sequence, allowing to perform recursive
  list processing task with a technique similar to LISP.
2025-06-07 18:04:59 +02:00
acc77654d1 clean-up: can now switch remaining downstream usages
after all the relevant library components do support both kinds of
type sequences transparently, any usages in core code can now be
switched over to the new, variadic type sequences.
2025-06-07 01:07:36 +02:00
95a9ceac35 clean-up: simplify function-closure -- avoiding std::function
A very performance relevant shortcoming of the existing implementation
of partial function closure is that the result is always wrapped into a
std::function, which typically causes a heap allocation when more than
a single pre-bound argument must be stored — which is annoying,
since the underlying Binder provides inline storage and thus
could be handled directly as a value object.

However, returning the Binder directly is also problematic, since
this object is outfitted with several overloaded function call operators,
which defeats most techniques to detect a function signature. Notably,
relevant down-stream metaprogramming code, like the tuple-closure used
in the `NodeBuilder` would break when being confronted directly with
a binder object.

An investigation shows that there is no direct remedy, short of
wrapping the binder into another functor. This can be accomplished
with a helper template, that generates a wrapper; however, this
wrapper builder must be supplied with explicit type information
regarding the function arguments (precisely because this type
signature can not be picked up from the Binder object itself)
2025-06-06 19:44:24 +02:00
10daa06ba2 clean-up: simplify function-closure -- enable forwarding and remove workarounds
This is a rather intricate and technical change, but allows in the end
to switch back all usages to a main implementation patch, which is now
based on `func::BindToArgument` — so this could become the final
implementation core and replace the old `PApply` template eventually...

Largely, these changes are related to allow for ''perfect forwarding''
of the functor and the argument values to be closed; these will be
copied into the ''Binder object'' created by `std::bind`.

Notably the `TupleConstructor` was changed to perfect-forward its »source«
into the specialised `ElmMapper`; this is possible since the latter
already receives a `SRC` template parameter, which can be supplied
with whatever base type the `std::forward` invocation will expose.
In the specialisation relevant here, template `PartiallyInitTuple`,
now an ''universal reference'' is stored and passed to `std::get`,
so that (depending on the input used), either a LValue or an
RValue reference is used for the extracted data elements.

After these changes, all existing usages of `applyFirst()` or `applyLast()`
can be replaced by this modernised implementation back-end, thus obsoleting
the various hard-coded workaround added during the last years.
2025-06-06 03:23:34 +02:00
f6f8220fbe clean-up: simplify function-closure -- can now remove obsoleted impl
A lot of repetitive, pre C++11 metaprogramming code can now be removed,
and several helper constructs, which were needed to handle generic
function application and passing a tuple of values to create a binder.

Note however, the highly complex and technical core of this header
still remains intact; which is to create a ''partial closure'' over
some arguments of a function, while keeping the remaining arguments
open as parameters for invocation.

TODO: Even in the remaining code there is a lot of redundancy
and helper construct which are no longer necessary
2025-06-05 19:11:46 +02:00
738d9e5b67 clean-up: simplify function-closure -- investigate BindToArgument
...because swapping in the new standards-based implementation
leads to compile failures on tests to cover out-of-bounds cases.

Under the (wrong) assumption, that some mistake must be hidden in
the Splice-metafunction, I first provided a complete test coverage;
while the actual problem was right below my nose, and quite obvious...

The old implementation, being based on a case distinction over the argument count,
simply was not able even to notice excess arguments; other the new implementation,
based on variadics and `std::apply`, which is fully generic and thus
passes excess arguments to `std::bind` when a position beyond the actual
argument list is specified to be closed.

The old behaviour was to silently ignore such an out-of-bounds spec,
and this can be reinstated by explicitly capping the prepared tuple
of binders and actual arguments passed to `std::bind`

Another question of course is, if being tolerant here is a good idea.


And beyond that, function-closure.hpp is still terrifyingly complex,
unorganised and use-case driven, to start with....
2025-06-05 18:00:05 +02:00
415e4746a6 clean-up: simplify function-closure -- rebuild the 'bind' case
...can now be formulated in a single function,
based on the apply-to-λ technique invented by David Vandervoorde.

WARNING: the rewritten version of BindToArgument<...>::reduced()
does not compile in the out-of-bounds case, revealing a possibly
long standing defect in the typelist-metafunction Splice
2025-06-05 03:19:03 +02:00
400d0eb92e clean-up: simplify function-closure -- eliminate the 'apply' case
This library header was developed at a time, where C++ had no built-in support
for so called "invokables"; `std::invoke` and `std::apply` were added much later;
So in that early version that was a significant technical hurdle to overcome.

seems like it might be possible to get rid of the TupleApplicator alltogether?
2025-06-05 01:18:59 +02:00
1a2c2ededa clean-up: switch the tricky function-closure
This is one of the most problematic headers, because it is highly complex
and comprises tightly interwoven definitions (in functional programming style),
which in turn are used deep within other features.

What concerns me is that this header is very much tangled
and pushes me (as the author) to my mental limits.

And on top of this comes that this code has to deal with intricate aspects
like perfect forwarding, and proper handling of binder instances and
function argument copying (which basically should be left to `std::bind`)

Fortunately, the changes ''for this specific topic'' are transparent:
Type sequences are not used on the API for function closure and composition,
but only as an internal tool to assemble argument tuples used for either
binding or invocation of the resulting (partially closed) function.
2025-06-04 01:49:07 +02:00
429a7e2339 clean-up: define variadic type-sequences independently
To bootstrap this tricky refactoring, initially a bridge definition
was used, with a variadic argument pack, but delegating to the old
non-variadic type sequence and from there further into LISP style
list processing of types and meta definitions, as pioneered by the
Loki libarary. Luimiera uses this technique since a long time to
perform the complex tasks sometimes required for code generation
and generic function and type adaptation.

with this changeset, a direct variadics based entrance into
type list processing is provided, so that the old definition
is now completely separate and can be removed eventually.
2025-06-04 03:21:18 +02:00
412abbace2 clean-up: validate use of variadic seq with tuples and generators
Most of the type-list and type-sequence related eccosystem can be
just switched over, after having added the conversion variants for
the new-style variadic type sequences

Again this was used as opportunity to improve readability of related tests
2025-06-03 16:14:13 +02:00
47b57da646 clean-up: validate the typelist manipulations
As expected, these work on the new-style variadic type sequences
equally well than on the old ones (tail-filled with `Nil` markers).

On that occasion, a complete makeover of the huge test case was carried out,
now relying on `ExpectString` instead of printing to STDOUT. This has the
benefit of showing the expectation immediately next to the code to be tested,
and thus makes it much easier to ''actually see'' how these meta-functions
operate on their parameters (which in fact are types in a type list)
2025-06-02 23:55:08 +02:00