5.x
vvvv gamma 5.2
新增
Ctrl+Shift+D复制当前选中的内容,连同所有入线一起。新粘贴出来的节点会与原来那些有同样的连接。- 复制粘贴现在会把相关的依赖一并带过去。
- Channel 支持通过 BeginChange 做批量改动(附帮助文档)
- 优化了 Channel 的热替换
- VL.IO.MIDI 现在带上了全局 Channel 绑定的支持
- 加了
Optional<T>的热替换支持 - 引入了一个新错误:「你不可以在 create 上读取一个 Pad」,帮你避开某类错误。
修复
- MeshSplit 节点现在对来自多网格模型的网格也能正确工作
- 复制粘贴 bug 修复:指派给 create 的连线粘贴之后没落在 create 上
- Replace With → IOBox 会移除 Slot(这个命令可在 Pad 的右键菜单里找到)
- 修复了使用 WinRT API 时的程序集加载问题
- 修复了 .HDE.vl 后缀的文件没被识别为预编译的问题(显示不出预编译状态)
- 修复了 5.0 的一处回归:草图会在帮助面板的 “Also found in” 一栏里出现两次
- 修复了 5.0 的一处回归:分片的
M<T>针脚断开时,该片段不会用default(M<T>)再被调用最后一次 - 修复了传入无效 IP 地址时 UDP 节点崩溃的问题(5.0 引入的回归)
- 修复了一个「启动时暂停」的 bug
- 方案浏览器现在把异常报进日志,而不是把应用弄挂
ImGui
- 修复了对象编辑器在枚举上不能正常工作的问题
- 改进了标签体系:你不用再操心标签了,vvvv 的 ImGui 包装会替你生成
YourLabel##UniqueId这样的标签。
vvvv gamma 5.1
变动
- OSCClient 现在能同时向多个目标发消息
- OSCClient 现在能在自己发消息的那个端口上收回消息(比如跟 SuperCollider 通信时很有用)
- Channel 更灵活了。每个
Channel<T>现在都能转成Channel<Object>(若你知道T,也能转回来)。ChannelOfObject这个参数现在由同一个 channel 实现,因而在以非泛化方式跟 channel 打交道的场合性能更好。 - 写入 Channel 时现在可以设定一个作者。通过检查
LatestAuthor,你可以忽略某个作者发来的消息(这样就能避免「自己跟自己说话」) - 引入全局 Channel
- 这类 Channel 可以通过一个「Channel 路径」(就是个普通字符串)查到
GlobalChannel节点提供对它们的动态访问 —— 你在运行时把 Channel 路径喂给它- 它们同时也会以静态类型的节点形式出现在
GlobalChannels目录下 - 模块可以绑定到它们上面。这部分正在积极开发中(比如 VL.IO.MIDI)
- 「Global Channels Browser」窗口纵览所有全局 channel 及其绑定。在帮助面板里搜 “global” 即可
- 托管的槽会按其构造顺序的逆序被销毁。举例来说,两个过程节点 A 和 B,有一条从 A 到 B 的连线,
Dispose时 B 会先于 A 被销毁。 - 新节点
Select (ByPath Dynamic),它从给定路径所指向的那个参数推断出输出 channel 的类型 —— 论坛 - 新的进阶区块
ReactOnMainThread [Reactive]会在主线程上调用它的区块主体,哪怕进来的 Observable 是从别的线程触发的。节点ToMainThread [Reactive]输出一个在主线程上运行的 Observable。这两个用在Delay [Reactive]或Throttle [Reactive]之后很合适 —— 那些并不在主线程上触发。(附帮助文档) - 新节点
StartEagerly [Reactive]把一个 Channel 变成 Observable,起始值就是 Channel 的当前值。这个值会在订阅时被推送出来(正如 BehaviorSubject 那样) - 加上了
HashSet<T>、ConcurrentDictionary<T>、List<T>的热替换支持 - 加了
Remove [Spread] - 加了
GetSlice (Channel)。它能在一个序号与「一个 Spread 里对应那一项」之间轻松地双向转换。(附帮助文档) - 加了
Channel提示框,它总是显示当前值。此前顶上来的是 Observable 提示框,那个要等到第一次被观察到推送之后才开始显示值 - 加了
Optional<T>的提示框
修复
- 通过 args.txt 喂进来时,
--editable-packages命令行参数没被拾取 - 修复了几处 emit 异常(比如论坛这条)
- 修复了 Pad 上的
Ctrl+T命令,以及带显式类型参数时的该命令 - 修复了 5.0 的一处回归:方案浏览器不再能导航到选中的类型转发
- 修复了拖动 IOBox 数字时的舍入误差
- 修复了 IOBox 在类型变更之后不再显示任何值的问题
- 修复了在某个包内部打草图时的编译器崩溃。这个崩溃发生在:你在包内部、某份并未被包的根文档引用的文档上打草图时。
- 修复了泛化接口继承自另一个泛化接口、且类型实参无法推断时的编译器崩溃。现在这种具体情形会给出一条像样的错误信息。
- 修复了通过路径引用程序集时的加载失败
- 修复了运行时解析带版本字符串的类型名
- 修复了来自 C# 项目引用的节点工厂没被拾取的问题
- 修复了
MutableObservableCollection的针脚类型和命名 - 修复了源数据类型变化时的
Select (ByPath):可交换对象在通过 VLPropertyInfo.GetValue 访问时会即时更新自己的状态。
Stride
- 修复了因一处 dll 加载问题导致 OpenXR 完全不工作
- 修复了在 OpenXR 下停用 VR 系统时的崩溃
- 修复了特性里的字面量在带数字后缀时没被拾取的问题。比如
[Default(2f)]此前解读得不对。
ImGui
- 修复了
ImGuiInputTextFlags.EnterReturnsTrue在Input控件上不起作用 - 对象编辑器在它的文本和数值编辑器上使用
ImGuiInputTextFlags.EnterReturnsTrue - 修复了停靠布局没被
LoadIniSettingsFromMemory和LoadIniSettingsFromDisk恢复的问题 - 修复了销毁使用
LayerWidget的草图时的访问冲突。此前若在同一帧里对一份使用 LayerWidget 的草图同时调用 Update 和 Dispose,系统会崩溃。 - 修复了把表格专用的命令节点放在
Table之外时的访问冲突 Popup、Popup (Modal)、Window、CollapsingHeader—— 它们都有一个 Visible 输入 channel —— 现在可以设为短生命周期:隐藏时销毁区块主体,显示时重新创建
vvvv gamma 5.0
新增
- 升级到 .NET 6
- 由于包现在是只读的,启动时间和内存占用都有改善
- 新的命令行参数:
--editable-packages,用来让个别包退出「默认只读」 - 所有节点库都开源了:Introducing VL.StandardLibs(英文)
- C# 项目可以被直接引用,从而实现可视化/文本混合的工作流
- 支持「新式」NuGet 包
- 导出的应用体积更小,它们不再依赖 VL.Lang
- 导出器把设置存在一个
*.props文件里。这个文件(以及可选的*.targets文件)可以用来定义导出时的自定义动作 - 加入了 ImGui 库,Channel 也做了优化以便于数据绑定
- 加了 Lock 区块
- HDE API:加了 ActiveLiveCanvasStream
- 新命令(
Ctrl+Shift+K),一次性为选中的 Pad 创建 getter 和 setter(访问器) - 来自外部文件(着色器、csproj)的节点现在右键菜单里有 “Show in Explorer” 一项
- 加了新包
VL.TestFramework,外部节点库可以用它来测试自己的文档 - 使用自适应节点的泛化类型,其实例可以动态创建。AlchemX / Kairos 用到了这一点。
New > C# File和New > Shader对话框,方便创建 C# 与着色器文件。- 帮助面板的
Learn标签页可以设为默认打开。
变动
- 导出的应用不再有装着所有程序集的
lib子目录 —— 技术上已经没法再支持这种目录布局了 - 改进了 SymbolFinder
- 当 “Browsable packages” 设置打开时,对只读包里的文档也管用
- 改进了搜索结果的排序
- 更清晰:第二行现在先显示包,再显示文件
- 提示框显示着色器的文件路径
Path现在是相对于入口点序列化的,而不是相对于发起Serialize调用的那份文档- 简化了自适应节点的错误信息
VL.EditingFramework拆成了VL.EditingFramework和只与 Skia 相关的VL.EditingFramework.Skia
修复
- 热替换、包编译、异常处理在稳定性和顺手程度上的改进
- 节点浏览器:去掉了一些小毛病
- 打开最近保存过的文档时,不应再显示为未保存
- 修复了新装的 HDE 扩展没被拾取的问题
- 布尔 IOBox:修复了「bang IOBox 由输入触发时亮得不一致」的问题
- 修复了 Elementa 提示框失效的问题(2021.4.11 引入的回归)
- 一些 Skia 性能改进
- 修复了 UDP 节点在 enabled == false 时仍在第一帧打开套接字的问题
- 修复了当进来的 Observable 不完成时,DatagramSender 节点不完成其发送任务的问题
- ResampleBSpline 节点:修复了 Closed 模式
- 修复了 Channel.Select (ByPath) 所用的 WithValueFromExpression
- 节点若来自某个节点工厂,Open node 命令会变灰
- Skia:
- 若选择了 Jpeg 格式,
ImageWriter会保留路径里的 jpg/jpeg 后缀 - 修复了
LottiePlayer,并加了LottiePlayer (FrameBased)
- 若选择了 Jpeg 格式,
Stride
- 升级到 Stride 4.1
- 加入了对 OpenXR 的支持(英文)
- Stride 现在在它的呈现路径上使用更现代的翻转模型(英文)
- 把回读节点的默认值从 3 帧提到 5 帧,并在其中某个节点把 GPU 卡住时加上运行时警告
- 修复了计算着色器输入的默认值处理
- 修复了 shaders 文件夹尚不存在时新建的着色器不出现的问题
ImagePlayer节点的性能改进- 不再有白闪,因为会等待要显示的那一帧
- 资源利用更好 —— 默认预加载数 2 现在能得到正确结果
- 读缓冲从 128 KB 提到 8 MB,从而大幅降低整体磁盘占用
- 加了新的曲面细分功能
- 加了 FlatCamera 节点
- 修复了 AxisAndGrid 的双重变换
- 修复了 Stride.Redenring.Within… 这些节点
Insert和Insert (UV)加进了 Stride.Texture.Utils