Warning: Ramblings ahead.
What & Why?
Currently only a small collection of addons that have accumulated on my HD over the last ~2-3 years.
A lot of them developed during various projects. Some posted by others in the chat or in the forum.
Initially it was only to be a way to get those things more organized for myself (up to now I’ve just kept some files that I manually copied from project to project). But while tidying things up I thought it might become more like the beta addonpack.
Contributions by the vvvv community that:
- don’t get added to the core libraries for reasons
- don’t (yet?) merit their own nuget packages
- get lost in the chat or forum otherwise
Ideally hosted by the vvvv group with some “external” maintainers that can merge pull requests (or maybe an organization like KairosResearchLab?).
Looking at the TextureFX stuff by @lecloneur for example you’ll see that making contributions to “official” libs can take a long time. One of the reasons being that the devvvvs only have limited resources. Maybe having something cared for by the community could move a bit faster (!= compromising on quality) and thus encourage more contributions?
Current structure
📦VL.Addons
┣ 📂.github
┃ ┗ 📂workflows
┃ ┃ ┗ 📜main.yml
┣ 📂deployment
┃ ┗ 📜VL.Addons.nuspec
┣ 📂help
┃ ┣ 📜Explanation Overview of available HitTest Nodes.vl
┃ ┣ 📜Explanation Overview of available Pixel Transform Nodes.vl
┃ ┣ 📜Explanation Overview of available TextureArray Nodes.vl
┃ ┣ 📜HowTo Animate a Camera.vl
┃ ┣ 📜HowTo Correct for Screen Bezels.vl
┃ ┣ 📜HowTo Different Color or Material Properties per Instance (Modulo).vl
┃ ┣ 📜HowTo Play a Spritesheet.vl
┃ ┣ 📜HowTo Render Text with Background.vl
┃ ┣ 📜HowTo Sample a TextureArray per Instance.vl
┃ ┣ 📜HowTo Sample a TextureArray with Index per Instance.vl
┃ ┣ 📜HowTo Texture Tansform Instanced.vl
┃ ┣ 📜HowTo Use GetSlice(TextureArray).vl
┃ ┣ 📜HowTo Use SetSlice(TextureArray).vl
┃ ┣ 📜Reference Cross.vl
┃ ┣ 📜Reference Disperse.vl
┃ ┣ 📜Reference Line (Dashed).vl
┃ ┣ 📜Reference MultiFlipFlop (Spectral).vl
┃ ┣ 📜Reference OrderedDictionary.vl
┃ ┣ 📜Reference QuadRenderer (TextureTransform).vl
┃ ┣ 📜Reference Segment (Advanced).vl
┃ ┣ 📜Reference Steps.vl
┃ ┣ 📜Reference TextureSize.vl
┃ ┣ 📜Reference WireBox.vl
┃ ┗ 📜Reference Zip (Advanced) nodes.vl
┣ 📂lib
┃ ┗ 📂net6.0
┃ ┃ ┣ 📜OrderedDictionary.dll
┃ ┃ ┗ 📜Zip.dll
┣ 📂resources
┃ ┣ 📂textures
┃ ┃ ┣ 📜001.dds
┃ ┃ ┣ 📜002.dds
┃ ┃ ┣ 📜003.dds
┃ ┃ ┗ 📜004.dds
┃ ┣ 📜CameraAnimation.xml
┃ ┗ 📜SpriteSheet.png
┣ 📂src
┃ ┣ 📂OrderedDictionary
┃ ┃ ┣ 📜A Generic OrderedDictionary in C# - CodeProject.URL
┃ ┃ ┣ 📜Key.snk
┃ ┃ ┣ 📜License-CPOL.htm
┃ ┃ ┣ 📜OrderedDictionary.Collection.cs
┃ ┃ ┣ 📜OrderedDictionary.cs
┃ ┃ ┣ 📜OrderedDictionary.csproj
┃ ┃ ┣ 📜OrderedDictionary.Dictionary.cs
┃ ┃ ┣ 📜OrderedDictionary.Enumerable.cs
┃ ┃ ┣ 📜OrderedDictionary.KeysCollection.cs
┃ ┃ ┣ 📜OrderedDictionary.List.cs
┃ ┃ ┣ 📜OrderedDictionary.ValuesCollection.cs
┃ ┃ ┗ 📜OrderedDictionary.xml
┃ ┣ 📂Zip
┃ ┃ ┣ 📜Zip.cs
┃ ┃ ┗ 📜Zip.csproj
┃ ┗ 📜VL.Addons.sln
┣ 📂vl
┃ ┣ 📂shaders
┃ ┃ ┣ 📜ArrayTextureInstanced_DrawFX.sdsl
┃ ┃ ┣ 📜Constant_TextureTransform_DrawFX.sdsl
┃ ┃ ┣ 📜ModuloGPU_ShaderFX.sdsl
┃ ┃ ┣ 📜SampleTextureArrayVector4.sdsl
┃ ┃ ┗ 📜SampleTextureArrayVector4WithIndex.sdsl
┃ ┣ 📜VL.Addons.2D.vl
┃ ┣ 📜VL.Addons.Animation.vl
┃ ┣ 📜VL.Addons.Collections.vl
┃ ┣ 📜VL.Addons.Control.vl
┃ ┣ 📜VL.Addons.Skia.vl
┃ ┗ 📜VL.Addons.Stride.vl
┣ 📜.gitignore
┣ 📜LICENSE
┣ 📜README.md
┗ 📜VL.Addons.vl
📜VL.Addons.vl
A meta file referencing and forwarding every file in the 📂vl
folder, not containing any definitions itself.
📂vl
Contains files for the main vl categories/ libraries. If those become too unwieldy they could be split more granular. Also contains 📂shaders
since it needs to be parallel to the stride definitions inside 📜VL.Addons.Stride
.
📂src
Contains a visual studio solution referencing the different helper csproj. One project per “contribution” each project in a separate folder. The projects currently target .net6, so the whole thing only works with 5.0.
How to use it
Some ways I came up with:
Super Basic
Download the zipped files from github and either reference VL.Addons.vl to get everything all at once or one / more single files to get their respective functionality.
Nuget
Use it as any other library that comes as nuget. For information on how to use nugets with VL, see Managing Nugets in the VL documentation. As described there you go to the commandline and then type:
nuget install VL.Addons
Then reference it using the Dependencies menu .
or the Node Browser
This will give you access to everything contained in 📦VL.Addons
which might or might not be what you want. Why have something Stride related referenced when only working with Skia for example.
When using Git
Add 📦VL.Addons
as submodule to your repo (see [1] / [2] for an explanation).
Either directly use the “original repo” - will be read only - or make a fork if you want to make changes to the addons while working on your project. (Forking is a good idea anyways if you want to contribute).
After adding the submodule you either use it like described under Super Basic above or start vvvv with a commandline argument like:
vvvv.exe --package-repositories "d:\somepath\foo\"
Where 📂foo
contains 📂VL.Addons
.
Then use it as you would any other Nuget .
What’s included
Maybe I’ll add a comprehensive list later…
Just some things that I didn’t develop myself:
There is a nice camera animation workflow by @antokhio that he posted in the chat once ( I only made some minor changes). And @readme made some camera and animation stuff while we were patching “the show” for Node20.
Issues / Qs
Just off the top of my head:
-
I didn’t ask @antokhio or @readme for permissionGet in touch and I’ll remove your stuff
- How to deal with licensing/attribution in general?
- Ideally everybody contributing can agree on one permissive license like MIT or CC0.
- What about external code? The ordered dictionary for example uses code licensed under CPOL.
- Is it enough to mention / link to the license in a help patch?
- Do the licenses have to be distributed with the nuget?
- Do contributions that come with different lincenses have to be split into different files?
- Do people have to consent to the licenses when installing the nuget?
What do you think?