vvvv gamma 2021.4.9
- GetSlice now has IReadOnlyList input, Spread version is obsolete
- SetSlice now has IList input, Spread version is obsolete
- GetList same as GetSpread but for IReadOnlyList
GetBoundsTransformationto transform from one rectangle into another
- Skia: Adds
FitToBoundsto fit a path into any bounds
vvvv gamma 2021.4.8
- Fixes region not showing error on unsupported border control points - forum
- Fixes flooding of process nodes in stateless regions. The Create fragment must always be assigned, while for the other fragments it depends on whether they are the default fragment, pins are modified/connected etc.
- No longer overwrite a document which is already open - forum
- Fixes regression in target code when initializing fields (introduced in 2021.4.1) - process nodes no longer took part in the recursive check leading to stack overflows in certain patches
- Fixes regression that
WebRenderer (Stride)of VL.CEF would no longer load
- Filters avoid NaN (OneEuro, Filter, Oscillator, Damper)
- No longer show yellow socks on links going into Comment/Do/Try regions
- Runtime will be stopped should the patch constructor crash
- ManageProcess: added adjustments of Lifespan
- cleanup for SurroundWith Menu
- Fixes double disposal of input source which lead to subsequent crash in case a game controller was connected - github
- Fixes crash when going fullscreen on second monitor with different DPI - github
- Added Dilate (Color), Erode (Color) and UVDilate TextureFX filters
- Added Checkerboard TextureFX source
- MeshSplit nodes now have Update input
- Fixes GlobalHelper add/remove logic
- Fixes TextureFX MipMap generator for typeless textures
- OrbitCamera now has Components and Children inputs
- Adds Tracking Space input to VRDevice
vvvv gamma 2021.4.7
- Now shipping with the VL.Audio pack
SetCurrentFrameClockto override the frame clock used for the current thread
- Adds EnumEntries node that returns a spread of entries for static enums
- Fixes tooltips and IO boxes in FUSE
- Fixes exact adaptive implementation not getting selected in case its implementation is generic
- Fixes ref-count initialization exception in
Renderer (Offscreen)in case the Clear pin was set to false
- Fixes access violation on shutdown
- Fixes sorting when having intelligent node filtering enabled
- User defined records will be emitted with proxies and therefor take part in hotswap - forum
- KeyMouse Display extension now always visible on monitor with mouse interaction
- Ping node now calls dispose correctly internally
- Node browser: back button again working over empty areas. no fullscreen via double click. refreshes again after adding dependency
- Splash screen movable, but not fullscreenable.
- CustomRegion: fix for when an incoming link starts from a splicer
- Resample nodes now take IReadOnlyList as input (was Spread)
- Warn nodes come with options
- S/R nodes come with Channel of type string
- Moved some highlevel Mouse & Keyboard (...) nodes over to Skia
- Fixes text input and click events - Elementa can now be used normally when rendered by
vvvv gamma 2021.4.6
- Node browser can be configured through new setting to show connectable nodes only
- Node browser now fades in, is scalable, movable, fullscreenable. Last size is remembered.
- Adds new regions
Lock (Inter-process)and new node
Usingensure the disposal of resources connected to its inputs after it executed
Locksynchronizes access to a shared resource
Lock (Inter-process)synchronizes access to a shared resource across process boundaries
TempFile [IO]simply creates and provides a unique temp file
- Allows to connect
- Splash Screen can be moved
- Several little fixes and more cleanups of the node browser.
- Fixed issue with FirmataDevice node forum
- Fixes value modifications on IO boxes potentially modifying the value upstream forum
- Fixes runtime not always selecting the newest iteration of a patch
- Fixes value tracing not working in static operations forum
- Fixes value tracing when debugging tooltips
- Fixes value tracing sometimes not working anymore after node doing an interface call
XmlWriterno longer writes BOM
- Fixes potential crash when opening VL files from directories containing files the current user has no access to
- Linking action and symbols now use same code path to determine whether two links are on the same moment forum
- Tooltips: again fixes for missing or misleading values. We now should be able to guarantee that we stick to only one instance, even when the instances got created dynamically.
- Tooltips: Simplification of the collection viewers
- Trees: Bug Fix for BuildUp. When reaching max depth we don't traverse deeper, but also don't fail.
- A little bit of love for the tree structure examples and the tree node viewer
- Added Feedback TextureFX node
- Added Circle, Rectangle, Polygon texture sources
- Removed RampColor Filter (was duplicate of MapColor)
- Removed Colorize Filter (Was duplicate of TriColor)
- KeyPress and KeyBang had their functionality exchanged
- Added PointerPoint (Split) node
- Mouse node outputs Positon in World and MouseRay if a camera is connected. Position in World is the XY Position for Z=0. This is helpful for any type of 2D application. For 3d applications the mouse ray is the one you're looking for.
vvvv gamma 2021.4.5
- Exporter allows to add an icon file for the exe
- Friendlier node browser icons. You now can distinguish Records from Classes and Interfaces.
- Custom regions: output border control points now can be read from any moment (aka many colorful links possible)
- Fixes assignment error not showing up on links into regions of process nodes
- Fixes Assign menu showing subpatches of the sink instead of the source
- Fixes pads inside of regions still not getting initialized as advertised in previous version forum
- Fixes complete crash when opening Skia Slideshow help patch forum
- Fixes stackoverflow when annotating IO box with
- Fixes type inference not generating an error connecting
T : IReadOnlyTree<T>to
- Explicit interface implementation in target code didn't find user implementation in case the return type was a non-trivial super type of the user output
- Tooltip viewer for data of type
- Corelib: small cleanup regarding top level experimental nodes. some got moved, some got deleted -> node browser is less cluttered when enabling Experimental
vvvv gamma 2021.4.4
- The Tokenizer nodes have their "Objectify" delegate input removed. In many cases it was simply used with a default implementation, in which case the delegate is now obsolete and can simply be removed. In cases where the delegate was actually used, the patch will have to be slightly adapted.
KeepAppAlive [System]node forum
- Exposes missing "Edit Mode" pin of SceneTexture
- Int3 is now non-advanced
- Int2/3/4 nodes have their constructors and split nodes unified
- Ensures pads inside of regions get initialized with VL defaults forum
- Fixes VL.CoreLib added twice as dependency to new documents
- Fixes crash after modifying a definition's Summary/Remarks/Tags forum
- Creating a process node by clicking “Node” in the nodebrowser or pins & pads: now checking for valid name
- Fix for Delay (Linear)
- Fixes an exception when replacing shader nodes
- The BreakAtWidth node's internal cache region has its force pin disabled
vvvv gamma 2021.4.3
- Faster C# code generation. Generating the code for normal startup now takes ~21s (down from ~37s), generating code for Elementa is now ~11s (down from ~24s).
- A process placed inside of a stateless patch will now produce a warning instead of an error. The warning will tell the user about the short life time of the process.
- Do-region added (always executes)
- Comment-region added (never executes)
- Try-region added (allows to react on runtime errors programmatically)
- Fixes null pointer when interacting with external nodes
- Fixes TextureEncoder returning new arrays every frame and fixes complete crash when saving textures in wrong format
- Fixes regression that patches with output pin groups opened by editor (= debug code path get switched on) would cause emit exception forum
- Fixes emit exception when using dictionary builder with apply pin forum
- Fixes complete freeze when opening documents in quick succession
- Connecting pins of type
Tinside of loops should work correctly now (used by FUSE)
- Fixed an issue with the "New Extension.." menu entry
Custom Region API
- now allows to reflect over incoming links that cross the region boundary
- now allows to ask for whether the user patch has changed
- Spreads returned by InputValues, Inputs, IncomingLinkValues and IncomingLinks got stabilized (same Spread instance if no slice changed)
vvvv gamma 2021.4.2
07 12 21
Fixes feedback in loading and saving of settings causing super slow startup from within Gamma Launcher
vvvv gamma 2021.4.1
06 12 21
New & Changes
- Press Ctrl+3 to save the active patch as .svg file right next to its .vl document
- Tooltips and IOBoxes: performance improvements and tweaks
- In case the compiler crashes when loading documents, the resulting exception will be dumped in the console window.
- No longer generate proxy classes for records - they shall be as lightweight as possible. The reasoning is that we don't patch inside of records that often. Since they usually pop up as leaves inside of object graphs, the performance impact of the proxy indirection layer can be quite severe.
- Tuple and ValueTuple nodes are now named as such with Create/Split versions
- The Gif recorder built into the Frames now produces higher quality and smaller files
- Fixes document loading crash in case a dependency contains an invalid file path (see forum)
- Fixes collection editors crashing when displaying value other than
- Regression: Fixes bang no longer working properly in heavy patches
- Regression: Fixes canvas of newly created patch (Ctrl+P) not showing up in tabs
- Regression: Fixes nodes drawing getting stuck in "not-executed" style
- ArtNet (Sender) now also binds to 6454 port
X<Y>not connectable to
- major internal paint- and layer-related rework leading to performance improvements, less memory usage, and a more stable frame rate.
- added SetTextSize (InPixels) node
- Group nodes now have a debug feature
- Renderer: added Enable Keyboard Shortcuts pin
- Renderer: added SetBounds operation with some options (in pixels/DIPs, netto/brutto size)
- added experimental RenderWindow (Upcoming) allowing to specify the Bounds with a regular Rectangle
- Offscreen renderer will throw an exception if called from the wrong thread
- ImageReader now releases file once read
- The export will throw an exception if a shader with the same name is seen multiple times
- Added TextureEncoder node that returns the texture encoded in the specified filetype as a byte array
- Fixes Skia text rendering broken while playing video
- Fixes crash when playing audio files
vvvv gamma 2021.4
released on 23 11 21
New & Changes
- Added a Hamburger menu for easy changing of settings and themes
- Adds auto document reload feature. Must be enabled in the settings.
- Added support for editor extensions
- Introduces user and editor runtimes
- Entry points of documents with the .HDE.vl extension will be run by the editor runtime where we can provide patch editor specific services.
- The editor runtime uses a cooperative mainloop, it's resolution is not as good as the one from the user runtime. However it runs in the editor thread and won't be stopped by a F8 command. Apart form that it behaves the same as the user runtime so patching in it should feel natural.
- Locally installed packages ending with .HDE will now be loaded by the editor. Allows to create packages solely for the editor.
- Adds Restart command (F9) and editor extension restart (Shift + F9)
- Couple of performance bottlenecks while patching have been addressed
- Pin values can be cleared (set to null) when deleting the value with backspace and committing to it with enter
- Simplified pin group keyboard shortcuts
Ctrl + +/-works again for nodes with only one input or output pin group (for example
- Now shipping with VL.Video.MediaFoundation package including VideoIn and VideoPlayer nodes that return a texture
- Methods marked with the
Obsoleteattribute will show up with a warning in VL
- Untyped pins and pads now come with a warning if a type is needed
- The compiler uses a different strategy which greatly reduces the compile and hotswap time in bigger projects. For details see discussion in the forums.
- Lifts all remaining restrictions on the
Thisnode. It can now be used in
Createas well as in generic patches. For details see dicussion in the VL Repo.
- Fields are written immediately inside of classes. For details see discussion in the VL Repo.
- Optional Explicit Type Parameters added. For details see dicussion in the VL Repo.
- Adds support for delegates other than
Func. For details see dicussion in the VL Repo.
- For delegate types other than Action and Func pins are aligned by name
Funcdelegate types the pins are aligned by index to avoid a breaking change
- The old code path for stateful regions is still in place (e.g.
Func<TState> create, Func<TState, Tuple<TState, TOutput>> update). We can slowly get rid of it by replacing those regions with the new approach and writing converters naming the pins accordingly (remember the old system aligned the pins by index)
- A node having a custom delegate type on one of its inputs results in a higher order region only
- Adds support for monadic values (e.g. the
GpuValue<T>of FUSE can be treated as such)
MonadicAttributeattribute to mark types as monadic
- Allows to connect
- The value of a pin of type
M<T>can be modified directly as long as an editor for
- Pins of type
M<T>can have default values
- Custom Regions API added. This allows to patch a stateful region with BorderControlPoints! See: ManageProcess for an example.
- New and much simpler ManageProcess region with output border control points
- New ForEach (Max) loop region taking the iteration count from the maximum of its inputs
- Adds new
Optional<T>type with serialization and editor support. An
Optional<T>IO box always represent the
HasNoValuestate can simply be achieved by not connecting at all.
- Added a TypeOf node
- LinearSpread now with a lot of more options, LinearSpread (Range) added
- Added RandomSpread (4D)
- Added GridSpread (2D/3D) nodes
- Added a TempPath node
- Added Determinant and ScalingVector to Matrix
- Added option for clock and ImagePlayer synchronization
- All operations on
ReadOnlyMemory<T>are now forwared
- Makes FSPickler aware of proxies as well as VL type names - fixes binary compatibility issues between emitted code of editor and exported apps. There's also a new nuget package called VL.CoreLib.Backports available, which backports the type name awareness to 2021.3. This allows to send records between instances running on different versions.
Deserialize (Binary ReadOnlyMemory)and makes Bson versions obsolete
- Paths are made relative on serialization and absolute on deserialization. This is now done in the Path's regular serializer by determining the base path using the current node context. Fixes
Spread<Path>not storing the paths relative, a
SaveAscommand will no longer change the relative paths and serializing a class or record containing paths will also make them relative and absolute again on deserialization.
- Resize node is reworked internally, Output Size pin is defined as Int2 instead of Vector2, switched from class to process node. The old node is moved to
- Resize node now using offscreen renderer - this improves the rendering performance of tooltips and IO boxes drastically (FPS going up from ~3 to stable 60)
- New: Resize (Relative), Crop, Crop (Relative)
- Added ImagePlayer node for .dds sequence playback
- All rendering is now done with Direct3D11 using ANGLE
Renderer (Offscreen)is now hardware accelerated and no longer experimental, removed
Renderer (Offscreen Accelerated)
- All Skia renderers share the same graphics context per thread - fixes super expensive context switches
- The default resource limit of a Skia graphics context has been increased from 96MB to 512MB
GRContextnode and type forward to give access to the graphics context on the current thread
- The lifetime of the output image of the
Renderer (Offscreen)is controlled by a
Producing (RefCount)node, while nodes such as
Using (RefCount)node - that combination allows for easy feedback loops of Skia images without having to copy them.
R16G16B16A16Fpixel format and whether the color channel is premultiplied with the alpha value
- Now shipping with TextureFX: sources, filters, mixer, and utilities
- New PostFX: Fog and Outline
- Reworked Buffer and Texture nodes
- All materials have ShaderFX inputs
- Shader node factory for ShaderFX nodes
- Shader nodes can have ShaderFX inputs
- Materials can be extended with custom shaders
- ShaderFX inputs of values and vectors can be connected directly to IOBoxes
- Shaders get
TimeStepautomatically set by the runtime
- High quality resize filters to scale textures
- Many new shader utils and functions
- ImagePlayer to play image sequences
- TextureWindow for eas texture preview
- Pipet node to sample texture pixels
- BufferReadback for non-blocking buffer value download to the CPU
- Mesh split nodes to read vertex data
- Width and Height pins are replaced with one Int2 Size pin
- Ambient occlusion works with an orthographic camera
- Fixes for Spout sender and receiver
- Stride windows move to the front on open
- Experimental multiple viewports support
- Experimental way to efficiently render from multiple perspectives into multiple textures
SkiaRenderernow uses ANGLE instead of
WGL_NV_DX_interop2. Fixes rendering not working at all on AMD hardware.
Gpu<T>as monadic unlocking features such as direct value manipulation and direct linking
- Many small improvements and fixes
API related Changes
- The register services method is only called when starting a patch, it will no longer be called while patching. This should save resources and make it much more predictable.
- The node path is now made out of unique (and persistent) ids. Elements can be identified across sessions. The old APIs are still in place for compatibility reasons. To make use of the new ones one needs to adjust the patches making use of it.
- Adds new nodes
Producing (RefCount)to reference count specific resources.
HoldLatestmake use of the
Using (RefCount)node. This for example allows to frame delay Skia images without having to clone them.
- Less strict value deserialization - allows to seemingly switch between single values and vectors. For example when turning a
float (+) (1f)into a
(1f)will be expanded to a
(1f, 1f)instead of going to zero.
- Adds extension methods
IVLObject.IsSupportedCollectionType(ported from VL.Elementa). The used traversal methods also support dictionaries now.
- Fixes null reference exception when calling GetFiles/GetDirectories/GetDescendants on empty path object (could be backported)
- Fixes some emit crashes when using special character or reserved keywords
- Fixes renaming of various elements. The rename will also only be applied after the user commits to it and not on every keystroke.
- Export will also work if runtime is stopped
- Reduces the amount of generated ad-hoc projects - fixes cases where shaders would overlap on export
- Fixes same shaders subfolder being copied to multiple exported projects
- Exporter will now add a package reference to the original nuget in case it generates the project belonging to that same package - ensures that all the build targets of the package get picked up / files get copied to the output folder
- Fixes serializer not preserving the runtime type of the root element
- Fixes slice states not getting disposed if used in nested loop and
Keepis false in first frame
- Fixes emit exception when the content of an adaptive implementation was inlined
- Documents can now be fully reloaded without the compiler crashing
- Render Windows that are "Bound To Document" will now always close the right document, even if the windows got wrapped in a helper node.
- Definitions in application patch get same categorization as the definitions in the definitions patch.
- Link tooltip comes with a delay as specified in the settings (if warning or error or Ctrl or Space)
- Fixes SKImageFilter and SKColorFilter tooltips
- Refinements on TextureViewer potentially showing the texture info before the content becomes available.
- Pinned tooltips are now less verbose
- Fixes PerspectiveLookAtRect. Scaling part now moved to ProjectionMatrix making a LookAtRectCam work with more shaders.
- Fixes crash when opening VL.Devices.uEye and not having VL.Elementa installed
- Fixes crash when loading documents with network paths (like file://) stored inside IO boxes
- Fixes identifiers not being escaped on export (like switch -> @switch, false -> @false etc.)
- Fixes error on link not visible in case it had a warning as well
- Fixes tags of factory nodes not getting picked up by system
- Fixes value tracing of process state output - was only working when connected
- Fixes crash when deserializing object graphs using generic patched types (was exposed by VL.Fuse.Control)
- Fixes experimental and obsolete warnings not showing up on plugins
- Fixes UI crash when opening a patch where the type of an iobox which stored min and max values changed
- Fixes help browser not reacting on first click
- Fixes backend crash after larger patch modifications and subsequent recompile
- Assemblies of newer frameworks (like net5 or netstandard 2.1) will no longer get picked up, avoiding confusion like here in the vvvv forums.