2021.4
vvvv gamma 2021.4.12
修复
- 修复了
LottiePlayer (Skia),现在动画播放流畅了。另外加了LottiePlayer (Framebased Skia)—— 论坛 - 修复了
Synchronizer区块导致 emit 异常 - 这个版本解决了几个与运行时异常有关的问题:
- 反序列化失败时,针脚和 IOBox 会变粉 —— 此前这类错误只在日志里看得到
- 若编译期就知道反序列化不会成功,编译器会在针脚和 IOBox 上加一条警告
- 此前定位运行时异常发生的草图位置有很大延迟 —— 现在修好了,系统应该会立刻导航过去
- 若一帧里发生多个异常,系统现在会把用户指向第一个
- 有些 Observable 图里的运行时异常此前完全不显示
- 2021.4.11 引入的下列回归已处理:
- 着色器上的 Open 命令不工作
- 着色器内部的错误在节点上看不到
- 双击文档标签重命名不该再抛异常
- 通过
CreateInstance动态创建实例时,泛化类型上有时会崩溃
- 修复了「设置 > 主题」。默认主题和自定义主题分得更清楚了 —— 论坛
- 扩展与 HDE 控件:默认流畅更新,并在帮助面板的 learn 区做了优化
- 针脚会与节点、Pad 和 BCP 对齐
- 安全网:编译器后端的编译错误现在会让对象变成过期的。作为用户,你显然不想让一个没反映你最新改动的程序跑着
- 重新启用了提示框上「按 [TAB] 分离」的提示
- 草图里网格可视化的一处小改进
vvvv gamma 2021.4.11
2022 年 11 月 12 日发布 安装包 | 离线安装包
新增
- 你现在可以用 Skia 播放 Lottie 文件(英文)了
- 你现在可以把自己作品的截图分享(英文)到我们的集体画廊。按
Ctrl+3。 - 你现在可以给 Skia 和 Stride 渲染器截图。按
Ctrl+2。 - 新的命令行选项
--nuget-path,用来指定主包文件夹 —— 论坛 - 新的命令行选项
--stoppedonstartup,启动 vvvv 但不启动任何用户草图 - 现在可以为自定义区块指定支持哪些边界控制点,以及施加什么类型约束
- 加了 Channel [Reactive] 和大量绑定运算符 —— 比如用来照料业务逻辑与界面之间的双向通信。还加了一个好用的区块:ForEach (Channel)。
- 加了 KeepAlive [Resources] 节点。你可以把东西交给它然后忘掉,别人稍后再来取。我们用它在运行时意外关闭的情况下保住帮助面板的可见性信息。
- 多亏了新的、对热替换友好的目标代码,垃圾回收器的压力大幅下降,修复了在草图编辑器里运行时的大量卡顿/掉帧。导出的应用不受这个改动影响 —— 论坛
- 重大系统更新:不允许任何过期代码运行
- 重大系统更新:热替换现在更灵活,也承担了更多职责
EqualsCyclic现在有了 Epsilon 针脚- 用 “Browsable packages” 设置取代了「中键点击导航到定义」,Open 命令和全局搜索都会应用它
变动
- 浮点数 IOBox:设定精度时现在也会把 StepSize 卡住,不让它比精度所允许的更细
- IPs 节点现在也返回 NetworkInterface 的类型
- Executor 节点现在允许用 SendString 节点给正在运行的进程发输入
Decons不再抛越界异常- 微调了错误信息的冒泡。过去,一个大草图结构最深处的一个小错误,很容易把一切都变红,而要找出那个具体错误几乎不可能。我们现在换了一种策略:不再让错误流向系统的每个角落,而只让它在文档结构里向上流。这意味着切到文档的定义页就能轻松找到它们。在应用侧我们仍会生成一个错误,但那个后续错误现在会以一条简单警告继续冒泡,让用户知道更深处有问题。
- 编译命令(F4)现在也会触发当前画布里嵌套定义的重新编译
- API:HoveredElement 和 ActiveCanvasStream 现在用上了新引入的 Channel 类型
- 日志窗口里记录得更多了
修复
- 重大:运行时更健壮了 —— 用户运行时和编辑器运行时(也就是 IDE 及其扩展所在的那个)都是;优化了异常管理与启动
- CustomRegion API。若干修复,并确保各项语言特性能好好配合:从
T到M<T>的自动转换现在在输入 BCP 上也管用了 - 修掉了臭名昭著的 “X is no X” 错误
- 编译器 bug 修复:极少数情况下编译器会试图把 T 转成 T 的 Monadic,而那并不赋值兼容;交叉连线的类型现在也正确了
- 若干与默认值相关的修复(深层泛化构造类型、递归泛化草图、通过反射 API 调用)
- 若干序列化 bug 修复(二进制的也在内)
- 给提示框一些关爱(修卡顿、崩溃、打嗝;对象查看器更好读了)
- 系统重负载时,提示框和基于查看器的 IOBox 更自信了:它们至少会努力做到每秒 5 帧;系统不重负载时则按 60 fps 更新
- 计时更新流畅、数字稳定
- 值查看:提示框里的时钟可视化反映主循环的帧率
- 修复了没有音频设备时 VL.Audio 里的空指针
- 修复了
SingleInstance区块的ReleaseAndDispose模式在导出应用里不工作 —— 论坛 - 修复并补齐了
StoreSequence节点的文档 - 修复了创建字典针脚组时的异常,以及一处内部相等检查导致无休止编译循环 —— 论坛
- 目标代码里的 SerializedDefaultValue 特性少了
- 修复了装了 Visual Studio 17.3 之后导出不再工作
- 修复了启用「出错时暂停」时的死锁
- 修复了不带时间同步运行时,seek 时间没有传给 ImagePlayer —— 论坛
- 修复了用
Surround命令创建的区块无法被替换 —— 论坛 - 修复了静态 Operation 内部不显示错误和警告
- 响应式区块 ForEach、ForEachKeep 现在会按常规方式捕获状态销毁时的异常:把节点染粉(而不是弹对话框)
- 帮助面板更快了,因为它不再每帧检查 NeedsLayout
Try区块现在也会捕获 Create 和 Dispose 上的异常;加了帮助文档 “HowTo Catch Exceptions With Try Region”- 重启应用之后,提示框和 IOBox 更可靠地重新挂到新实例上
- 提示框和节点浏览器弹出时的干扰少了
- 去掉了粉色节点和提示框的闪烁
- 更好的自适应节点错误信息
- 修掉了「中键点击做的事和 Open 不一样」
- 编译器细节:类型参数不再有「必须不可变」这个念头
- 对齐节点、Pad 和边界控制点,现在确实是在对齐节点、Pad 和边界控制点
- 修复了后端不重新编译已改动的文档,进而导致注册了过期的服务
Stride
vvvv gamma 2021.4.10
修复
- 反序列化 vl 文档:修复了
Path类型的 IOBox - Path IOBox 导出:若路径原先末尾没有
\就不加上 - 修复了一处崩溃(爬取程序集时)
- 修复了当无效类型落进自定义区块(比如
Do)的输出控制点时的后端崩溃 - 修复了在较大文档里打草图时的卡顿
- 泛化字段值查看的热修复
- 修复了用
Try、Comment(……)做 surround 时,有些连线偶尔会变红 - 在
ImagePlayer节点里强制对 SKImage 解码 —— 修复了配合 JPEG 时的白闪 - 修复了 vvvv.exe 没能正确关闭 —— 论坛
变动
Wanderer (2d)的起始位置现在在 Create 上初始化Wanderer (3d)有了更好的默认值ImagePlayer的 OnScanningComplete 现在只在第一个文件加载完之后才触发- 编辑名字/标识符时不再能输入非法字符
Damper、Oscillator现在会就地改动它们内部的函数,以减轻垃圾回收器的压力。加了一个CloneOperation,Example Oscillator cyclic里用它来可视化内部函数的不同快照。Executor节点的输出现在一致了
新增
- 编译本地草图:按
F4。理想世界里这没必要 —— 编译器会重新编译一切被你的改动间接影响到的草图。但在现实世界里,若这没发生(比如某个不该红的节点或针脚红了),你可以按 F4。 - 给进阶集合类型加了
MutableArraySegment
Stride
MeshModel和MeshesModel节点现在能正确处理BoundingBox和BoundingSphere- 加了实验性的
Text [Stride.Models]节点,用来在 3D 空间里简单地摆放文字 - 加了
ViewportGrid节点 MeshSplit节点现在能处理没有 IndexBuffer 的网格- 加了对预编译着色器的支持
节点浏览器
- 节点浏览器现在提供重载,而不是单个针脚的候选。每一条都代表一个节点
- 去掉了 OK 和 Cancel 按钮
- 修复了智能节点过滤:
Spread<string>现在能连到BinarySearch (KeySelector) - 即使没按
External按钮,来自外部节点的针脚候选也会显示(因为用户已经认下了那个外部类型) - 修掉了一个「意外自动选中区块」的 bug(选
GroupBy时会引用 System.Linq) - 修掉了一个「针脚候选太多」的 bug(列 BinarySearch 重载时出现一堆
T类型的候选) - 弹出的针脚候选少了(
A<T> == A<T>的相等检查现在管用了) - 单针脚候选模式(它已不再是默认)现在会尽可能挑最短的那个节点。若你想要别的针脚,再打开一次节点浏览器即可。
- 若只剩进阶重载就不再问针脚候选:我们只有一个非进阶的
Deserialize节点,直接自动选它 - 修掉了某些节点创建不出来的 bug:
System.Text.Json.JsonsSerializer的Serialize和Deserialize重载
vvvv gamma 2021.4.9
变动
- 导出器现在让你在开发过程中不必总是复制自己的素材
新增
GetSlicefor IReadOnlyList,进阶用户建议用它而不是 Spread 版本SetSlicefor IList,进阶用户建议用它而不是 Spread 版本GetList,与 GetSpread 相同但用于 IReadOnlyListGetBoundsTransformation,从一个矩形变换到另一个- 给 Ray 的
Sample和Reflect,以及配套的帮助文档
修复
- 导出器:修复了子草图(文档路径不同)里素材路径的导出
- 修复了打开「带非泛化 CreateDefault Operation 的泛化类型转发」时的崩溃
- 修复了从导出的应用向编辑器发送 Spread 数据时的 FSPickler 异常 —— 论坛
- 运行时停止时输出盒会取消订阅 —— 论坛
- 修复了 VL.Video 里的一些 seek 问题 —— 论坛
- 修复了 release 构建里所生成项目的命名。比如现在能正确看到 VL.CoreLib.vl(而不是 VL.XML.vl)
- 修复了双击某些节点时弹出异常 —— 论坛
- 修复了移除某个引用、节点再也解析不了(导致未连接的泛化针脚)时的 emit 异常
- 修复了读空文件时的空指针(
FileReader节点)
Skia
- 加了
FitToBounds,把一条路径塞进任意边界里
Stride
- 修复了导出 Stride 应用时的一处回归 —— 有些模型不再被加载 —— 论坛
- MouseRay 现在可以显式喂入 InputSource
- 加了 HowTo Reflect a Ray on nearest Sphere
vvvv gamma 2021.4.8
修复
- 修复了区块在不受支持的边界控制点上不显示错误 —— 论坛
- 修复了无状态区块里过程节点泛滥的问题。Create 片段必须始终被指派,而其他片段则取决于它们是不是默认片段、针脚有没有被改动或连接等等。
- 不再覆盖已经打开的文档 —— 论坛
- 修复了初始化字段时目标代码里的一处回归(2021.4.1 引入)—— 过程节点此前不参与递归检查,导致某些草图里栈溢出
- 修复了 VL.CEF 的
WebRenderer (Stride)不再加载的回归 - 滤波器避开 NaN(OneEuro、Filter、Oscillator、Damper)
变动
- 连进 Comment/Do/Try 区块的连线上不再显示黄袜子
- 若草图构造函数崩溃,运行时会被停掉
- ManageProcess:加了 Lifespan 的调整
- 整理了 SurroundWith 菜单
Stride
- 修复了输入源被双重销毁,那在接了游戏手柄时会导致后续崩溃 —— github
- 修复了在 DPI 不同的第二显示器上全屏时的崩溃 —— github
- 加了 Dilate (Color)、Erode (Color) 和 UVDilate 这几个 TextureFX 滤镜
- 加了 Checkerboard TextureFX 源
- MeshSplit 节点现在有了 Update 输入
- 修复了 GlobalHelper 的增删逻辑
- 修复了针对无类型纹理的 TextureFX MipMap 生成器
- OrbitCamera 现在有了 Components 和 Children 输入
- 给 VRDevice 加了 Tracking Space 输入
vvvv gamma 2021.4.7
新增
- 现在随附 VL.Audio 包
- 加了
SetCurrentFrameClock,用来覆盖当前线程所用的帧时钟 - 加了 EnumEntries 节点,返回静态枚举条目的 Spread
修复
- 修复了
Pipet节点 —— 论坛 - 修复了 FUSE 里的提示框和 IOBox
- 修复了当某个自适应实现本身是泛化的时候,精确匹配的实现没被选中
- 修复了 Clear 针脚设为 false 时
Renderer (Offscreen)里的引用计数初始化异常 - 修复了关闭时的访问冲突
- 修复了启用智能节点过滤时的排序
- 用户定义的 Record 会带代理一起 emit,因而能参与热替换 —— 论坛
- 键鼠显示扩展现在总是显示在有鼠标交互的那块显示器上
- Ping 节点现在内部会正确调用 dispose
- 节点浏览器:返回按钮在空白区域上重新可用;双击不再全屏;添加依赖后会重新刷新
- 启动画面可移动,但不能全屏
- CustomRegion:修复了入线起自某个 splicer 的情形
变动
- Resample 系列节点现在接受 IReadOnlyList 作为输入(此前是 Spread)
- Warn 系列节点带上了选项
- S/R 节点带上了 string 类型的 Channel
- 把一些高层的 Mouse 和 Keyboard(……)节点挪到了 Skia
Stride
- 修复了文字输入和点击事件 —— Elementa 现在由
SkiaRenderer渲染时可以正常使用了
vvvv gamma 2021.4.6
新增
- 节点浏览器可以通过新设置配置成只显示可连接的节点
- 节点浏览器现在会淡入,可缩放、可移动、可全屏。会记住上次的尺寸。
- 加了新区块
Using、Lock和Lock (Inter-process),以及新节点TempFile [IO]—— 论坛Using在执行完之后确保销毁接在它输入上的资源Lock同步对共享资源的访问Lock (Inter-process)跨进程边界同步对共享资源的访问TempFile [IO]只是创建并提供一个唯一的临时文件
- 允许把
IReadOnlyListy<T>连到AsReadOnlyMemory节点 - 启动画面可以移动了
修复
- 节点浏览器的若干小修复与整理
- 修复了 FirmataDevice 节点的问题 —— 论坛
- 修复了在 IOBox 上改值可能反过来改动上游的值 —— 论坛
- 修复了运行时并非总是选用草图的最新一次迭代
- 修复了值追踪在静态 Operation 里不工作 —— 论坛
- 修复了调试提示框时的值追踪
- 修复了节点做过一次接口调用之后值追踪有时失效
XmlWriter不再写 BOM- 修复了打开 VL 文件时的潜在崩溃 —— 当目录里含有当前用户无权访问的文件时
- 连线动作与符号现在用同一条代码路径判断两条连线是否在同一时刻上 —— 论坛
- 提示框:再次修复了缺失或误导的值。我们现在应该能保证只盯住一个实例,哪怕那些实例是动态创建的。
- 提示框:简化了集合查看器
- 树:BuildUp 的 bug 修复。达到最大深度时我们不再往下走,但也不报错。
- 给树结构示例和树节点查看器一点关爱
Stride
- 加了 Feedback TextureFX 节点
- 加了 Circle、Rectangle、Polygon 三个纹理源
- 移除了 RampColor 滤镜(与 MapColor 重复)
- 移除了 Colorize 滤镜(与 TriColor 重复)
- KeyPress 和 KeyBang 的功能对调了
- 加了 PointerPoint (Split) 节点
- Mouse 节点在接了相机时会输出 Position in World 和 MouseRay。Position in World 是 Z=0 时的 XY 位置,这对任何 2D 应用都有帮助;3D 应用要找的则是 mouse ray。
vvvv gamma 2021.4.5
新增
- 导出器允许为 exe 添加图标文件
变动
- 更友好的节点浏览器图标。你现在能把 Record、Class 和 Interface 区分开了。
- 自定义区块:输出边界控制点现在可以从任意时刻读取(也就是可以有很多彩色连线了)
修复
- 修复了连进过程节点区块的连线上不显示指派错误
- 修复了 Assign 菜单显示的是汇点的子草图而不是源的
- 修复了区块内部的 Pad 仍未按上个版本所宣称的那样初始化 —— 论坛
- 修复了打开 Skia Slideshow 帮助文档时的彻底崩溃 —— 论坛
- 修复了用
IReadOnlyTree<T>标注 IOBox 时的栈溢出 - 修复了把
T : IReadOnlyTree<T>连到GPU<U>时类型推断不报错 - 目标代码里的显式接口实现,在返回类型是用户输出的非平凡超类型时找不到用户的实现
- 加了
IReadOnlyTreeNode类型数据的提示框查看器 - Corelib:对顶层实验性节点做了小整理,有的挪了位置,有的删掉了 → 打开 Experimental 时节点浏览器不那么乱了
vvvv gamma 2021.4.4
破坏性改动
- Tokenizer 系列节点去掉了 “Objectify” 这个 Delegate 输入。很多情况下它只是被用了个默认实现 —— 那种情况下这个 Delegate 现在已经多余,直接删掉即可。而真的用到了它的情况下,草图得稍作调整。
变动
- 加了
KeepAppAlive [System]节点 —— 论坛 - 暴露了 SceneTexture 上缺失的 “Edit Mode” 针脚
- Int3 现在不再是 advanced
- Int2/3/4 节点的构造和拆分节点统一了
修复
- 确保区块内部的 Pad 会用 VL 默认值初始化 —— 论坛
- 修复了 VL.CoreLib 被作为依赖重复加进新文档两次
- 修复了改动某个定义的 Summary/Remarks/Tags 之后崩溃 —— 论坛
- 在节点浏览器里点 “Node”、或在针脚和 Pad 上创建过程节点时:现在会检查名字是否有效
- 修复了 Delay (Linear)
- 修复了替换着色器节点时的一处异常
- BreakAtWidth 节点内部的 Cache 区块关掉了它的 force 针脚
vvvv gamma 2021.4.3
2021 年 12 月 22 日发布 安装包 | 离线安装包
变动
- 给 Stride 加了
TextureDecoder - C# 代码生成更快了。常规启动的代码生成现在约 21 秒(此前约 37 秒),Elementa 的代码生成现在约 11 秒(此前约 24 秒)。
- 把一个 process 放进无状态草图里现在只产生警告而不是错误。这条警告会告诉用户这个 process 的生命周期很短。
- 加了 Do 区块(总是执行)
- 加了 Comment 区块(从不执行)
- 加了 Try 区块(允许用程序对运行时错误作出反应)
修复
- 修复了与外部节点交互时的空指针
- 修复了 TextureEncoder 每帧返回新数组,以及以错误格式保存纹理时的彻底崩溃
- 修复了一处回归:带输出针脚组的草图被编辑器打开(也就是调试代码路径被打开)时会导致 emit 异常 —— 论坛
- 修复了带 apply 针脚的字典构建器导致的 emit 异常 —— 论坛
- 修复了快速连续打开多个文档时的彻底冻结
- 在循环内部把
Gpu<T>类型的针脚连到T现在应该正常了(FUSE 用到了它) - 修复了 “New Extension..” 菜单项的一处问题
自定义区块 API
- 现在允许对跨越区块边界的入线做反射
- 现在允许询问用户草图有没有变化
- InputValues、Inputs、IncomingLinkValues 和 IncomingLinks 返回的 Spread 稳定下来了(若没有 slice 变化就返回同一个 Spread 实例)
vvvv gamma 2021.4.2
修复了设置加载与保存中的反馈,它会导致从 Gamma Launcher 启动时极慢
vvvv gamma 2021.4.1
新增与变动
- 按
Ctrl+3把当前草图存成 .svg 文件,就放在它的 .vl 文档旁边 - 提示框与 IOBox:性能改进与调整
- 若编译器在加载文档时崩溃,产生的异常会被转储到控制台窗口
- 不再为 Record 生成代理类 —— 它们应当尽可能轻量。理由是我们不太会在 Record 内部打草图;而它们通常作为对象图里的叶子出现,代理这层间接的性能影响可能相当严重。
- Tuple 和 ValueTuple 节点现在按它们本来的名字命名,并带 Create/Split 版本
- 边框里内置的 Gif 录制器现在产出质量更高、体积更小的文件
修复
- 修复了当某个依赖含有无效文件路径时的文档加载崩溃(见论坛)
- 修复了集合编辑器在显示
Spread<Spread<T>>之外的值时崩溃(见论坛) - 回归:修复了 bang 在重负载草图里不再正常工作
- 回归:修复了新建草图(
Ctrl+P)的画布不出现在标签页里 - 回归:修复了节点绘制卡在「未执行」样式上
- ArtNet (Sender) 现在也绑定 6454 端口
语言
- 修复了
X<Y>连不到Optional<X<Y>>(见论坛)
Skia
- 内部对 paint 和 layer 做了大幅重做,带来性能提升、更低内存占用和更稳定的帧率
- 加了 SetTextSize (InPixels) 节点
- Group 系列节点现在有了调试功能
- 渲染器:加了 Enable Keyboard Shortcuts 针脚
- 渲染器:加了带若干选项的 SetBounds Operation(按像素/DIP,净尺寸/毛尺寸)
- 加了实验性的 RenderWindow (Upcoming),允许用普通的 Rectangle 指定 Bounds
- 离屏渲染器若从错误的线程被调用会抛异常
- ImageReader 读完之后会释放文件
Stride
- 若同名着色器出现多次,导出会抛异常
- 加了 TextureEncoder 节点,把纹理按指定文件类型编码成字节数组返回
视频
- 修复了播放视频时 Skia 文字渲染坏掉
- 修复了播放音频文件时的崩溃
vvvv gamma 2021.4
2021 年 11 月 23 日发布 安装包 | 离线安装包
新增与变动
- 加了汉堡菜单,方便修改设置和主题
- 加了文档自动重新加载功能。需要在设置里启用。
- 加了对编辑器扩展的支持
- 引入了用户运行时和编辑器运行时
- 后缀为 .HDE.vl 的文档,其入口点由编辑器运行时来跑 —— 在那里我们能提供草图编辑器专用的服务
- 编辑器运行时用的是协作式主循环,它的精度不如用户运行时。不过它跑在编辑器线程上,不会被 F8 命令停掉。除此之外它的行为与用户运行时相同,所以在里面打草图应该感觉很自然。
- 本地安装的、以 .HDE 结尾的包现在会被编辑器加载。这允许你做纯粹给编辑器用的包。
- 加了重启命令(F9)和编辑器扩展重启(
Shift+F9) - 处理了打草图时的几处性能瓶颈
- 针脚的值可以被清空(设为 null)—— 用退格删掉值再按回车确认
- 简化了针脚组的快捷键
Ctrl++/-对只有一个输入或输出针脚组的节点(比如Decons)重新可用了
- 现在随附 VL.Video.MediaFoundation 包,其中包括返回纹理的 VideoIn 和 VideoPlayer 节点
- 标了
Obsolete特性的方法在 VL 里会带一条警告显示出来 - 未标类型的针脚和 Pad 在需要类型时会带上警告
- 编译器换了一种策略,大幅减少了大项目里的编译和热替换时间。细节见论坛里的讨论。
语言
- 解除了
This节点上所有剩余的限制。它现在既能用在Create里,也能用在泛化草图里。细节见 VL 仓库里的讨论。 - 类内部的字段会立即写入。细节见 VL 仓库里的讨论。
- 加了可选的显式类型参数。细节见 VL 仓库里的讨论。
- 加了对
Action和Func之外的 Delegate 的支持。细节见 VL 仓库里的讨论。- 对 Action 和 Func 之外的 Delegate 类型,针脚按名字对齐
- 对
Action和Func类型,针脚仍按序号对齐,以免造成破坏性改动 - 有状态区块的老代码路径还在(比如
Func<TState> create, Func<TState, Tuple<TState, TOutput>> update)。我们可以慢慢把这些区块换成新做法、并写好相应命名针脚的转换器,从而摆脱它(记住老系统是按序号对齐针脚的) - 某个节点的某个输入上带自定义 Delegate 类型时,只会产生高阶区块
- 加了对 monadic 值的支持(比如 FUSE 的
GpuValue<T>就可以这样看待)- 新的
MonadicAttribute特性,用来把类型标记为 monadic - 允许把
T连到M<T> - 只要存在
T的编辑器,M<T>类型针脚的值就可以直接修改 M<T>类型的针脚可以有默认值
- 新的
- 加了自定义区块 API。这允许你打出带边界控制点的有状态区块!例子见 ManageProcess。
核心库
- 全新且简单得多的 ManageProcess 区块,带输出边界控制点
- 新的 ForEach (Max) 循环区块,迭代次数取自其输入中的最大值
- 加了新类型
Optional<T>,带序列化和编辑器支持。Optional<T>的 IOBox 永远表示HasValue状态;HasNoValue状态只要什么都不连即可得到。 - 加了 TypeOf 节点
- LinearSpread 有了多得多的选项,并加了 LinearSpread (Range)
- 加了 RandomSpread (4D)
- 加了 GridSpread (2D/3D) 系列节点
- 加了 TempPath 节点
- 给 Matrix 加了 Determinant 和 ScalingVector
- 加了时钟以及 ImagePlayer 同步的选项
Memory<T>和ReadOnlyMemory<T>上的所有 Operation 现在都被转发了- 让 FSPickler 认得代理以及 VL 类型名 —— 修复了编辑器生成代码与导出应用之间的二进制兼容问题。另外还有一个叫 VL.CoreLib.Backports 的新 NuGet 包,把类型名感知回移到 2021.3。这允许在跑着不同版本的实例之间发送 Record。
- 加了
Deserialize (Binary ReadOnlyMemory),并把 Bson 版本标为废弃 - 路径在序列化时变成相对的、反序列化时变回绝对的。这现在由 Path 常规的序列化器完成,它通过当前节点上下文确定基准路径。这修复了
Spread<Path>没有把路径存成相对路径;SaveAs命令不再改变相对路径;序列化含路径的类或 Record 时也会把它们变成相对路径,反序列化时再变回绝对路径。
Skia
- Resize 节点内部重做了,Output Size 针脚定义为 Int2 而不是 Vector2,并从 Class 改成了过程节点。老节点挪进了
Obsolete。 - Resize 节点现在用离屏渲染器 —— 这大幅提升了提示框和 IOBox 的渲染性能(FPS 从约 3 升到稳定 60)
- 新增:Resize (Relative)、Crop、Crop (Relative)
- 加了 ImagePlayer 节点,用于 .dds 序列播放
- 所有渲染现在都通过 ANGLE 用 Direct3D11 完成
Renderer (Offscreen)现在有硬件加速、不再是实验性的,并移除了Renderer (Offscreen Accelerated)- 所有 Skia 渲染器在每个线程上共享同一个图形上下文 —— 修复了极其昂贵的上下文切换
- Skia 图形上下文的默认资源上限从 96MB 提到了 512MB
- 加了
GRContext节点和类型转发,以便访问当前线程上的图形上下文 Renderer (Offscreen)输出图像的生命周期由Producing (RefCount)节点控制,而FrameDelay、S+H、HoldLatest这类节点用Using (RefCount)节点 —— 这个组合让 Skia 图像的反馈回路无需复制就能轻松实现- 加了
ToSkiaImage节点、R16G16B16A16F像素格式,以及颜色通道是否与 alpha 值预乘的设定
Stride
- 现在随附 TextureFX:源、滤镜、混合器和工具
- 新的后处理效果:Fog 和 Outline
- 重做了 Buffer 和 Texture 节点
- 所有材质都有 ShaderFX 输入
- 给 ShaderFX 节点做的着色器节点工厂
- 着色器节点可以有 ShaderFX 输入
- 材质可以用自定义着色器扩展
- 值和向量的 ShaderFX 输入可以直接连到 IOBox
- 着色器的
ViewSize、AspectRatio、Time和TimeStep由运行时自动设定 - 高质量的缩放滤镜,用来缩放纹理
- 许多新的着色器工具和函数
- ImagePlayer,用来播放图像序列
- TextureWindow,方便预览纹理
- Pipet 节点,用来采样纹理像素
- BufferReadback,把缓冲区的值非阻塞地下载到 CPU
- Mesh split 系列节点,用来读取顶点数据
- Width 和 Height 针脚合并成了一个 Int2 的 Size 针脚
- 环境光遮蔽现在能配合正交相机工作
- 修复了 Spout 的发送端和接收端
- Stride 窗口打开时会移到最前
- 实验性的多视口支持
- 实验性的、从多个视角高效渲染到多张纹理的方式
SkiaRenderer现在用 ANGLE 而不是WGL_NV_DX_interop2。修复了在 AMD 硬件上完全无法渲染的问题。- 把
Gpu<T>标记为 monadic,从而解锁了直接改值和直接连线这些功能 - 许多小改进与修复
API 相关改动
- 注册服务的方法只在启动草图时被调用,打草图过程中不再调用。这应该能省资源,也让行为可预测得多。
- 节点路径现在由唯一(且持久)的 id 构成,元素可以跨会话被识别。老的 API 出于兼容仍在。想用新的就得相应调整用到它的草图。
- 加了新节点
Using (RefCount)和Producing (RefCount),用来对特定资源做引用计数。FrameDelay、S+H和HoldLatest用上了Using (RefCount)。这样比如就能对 Skia 图像做帧延迟而不必克隆它们。 - 更宽松的值反序列化 —— 允许在单值和向量之间无缝切换。比如把
float (+) (1f)变成Vector2 (+)时,那个(1f)会被扩展成(1f, 1f),而不是归零。 - 加了扩展方法
IVLObject.TryGetPath和IVLObject.IsSupportedCollectionType(从 VL.Elementa 移植过来)。所用的遍历方法现在也支持字典。
修复
- 修复了对空 path 对象调用 GetFiles/GetDirectories/GetDescendants 时的空引用异常(可以回移)
- 修复了使用特殊字符或保留关键字时的一些 emit 崩溃
- 修复了各类元素的重命名。重命名现在只在用户确认之后才应用,而不是每敲一个键就应用。
- 运行时停止时导出也能工作
- 减少了生成的临时项目数量 —— 修复了导出时着色器会互相重叠的情形
- 修复了同一个 shaders 子文件夹被复制到多个导出项目里
- 导出器现在会在「所生成项目属于某个包」时,为那个原始 NuGet 添加一条包引用 —— 确保这个包的所有构建目标都被拾取、文件都被复制到输出文件夹
- 修复了序列化器没有保住根元素的运行时类型
- 修复了在嵌套循环里使用、且第一帧
Keep为 false 时 slice 状态没被销毁 - 修复了自适应实现的内容被内联时的 emit 异常
- 文档现在可以完全重新加载而不让编译器崩溃
- 「绑定到文档」的渲染窗口现在总会关掉正确的文档,哪怕这些窗口被包在某个辅助节点里
- 应用草图里的定义与定义草图里的定义得到相同的归类
- 连线提示框会按设置里指定的延迟出现(在有警告或错误、或按住
Ctrl或空格时) - 修复了 SKImageFilter 和 SKColorFilter 的提示框
- 优化了 TextureViewer 可能在内容就绪前就显示纹理信息的问题
- 被钉住的提示框不再那么啰嗦
- 修复了 PerspectiveLookAtRect。缩放部分挪进了 ProjectionMatrix,让 LookAtRectCam 能配合更多着色器工作。
- 修复了在没装 VL.Elementa 的情况下打开 VL.Devices.uEye 时的崩溃
- 修复了加载「IOBox 里存着网络路径(比如 file://)」的文档时的崩溃
- 修复了导出时标识符没被转义(比如 switch → @switch、false → @false 等等)
- 修复了当某条连线同时带警告时,它上面的错误不可见
- 修复了工厂节点的标签没被系统拾取
- 修复了过程状态输出的值追踪 —— 此前只在连上时才管用
- 修复了反序列化「使用打出来的泛化类型的对象图」时的崩溃(由 VL.Fuse.Control 暴露)
- 修复了实验性和废弃警告在插件上不显示
- 修复了打开某个草图时的界面崩溃 —— 当其中某个 IOBox 存了最小最大值而其类型变了时
- 修复了帮助面板对第一次点击没反应
- 修复了较大草图改动之后重新编译时的后端崩溃
- 更新框架(比如 net5 或 netstandard 2.1)的程序集不再会被拾取,避免了 vvvv 论坛这里那样的困惑