返回顶部
v

vvvv-dotnetvvvv与.NET集成

Helps with .NET integration in vvvv gamma — NuGet packages, library references, .csproj project configuration, the [assembly: ImportAsIs] attribute, vector type interop, and async patterns. Use when adding NuGet packages, configuring build settings, referencing external .NET libraries, setting up the ImportAsIs assembly attribute, working with System.Numerics/Stride type conversions, or when nodes aren't appearing in the node browser due to missing assembly configuration.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.1
安全检测
已通过
295
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

vvvv-dotnet

vvvv gamma 中的 .NET 集成

vvvv 插件的 .csproj 配置

vvvv gamma C# 插件的最小 .csproj 文件:

xml


net8.0
..\..\lib\net8.0\
false





关键设置:

  • - 目标框架:net8.0(vvvv gamma 6+ 必需)
  • 输出路径:指向相对于 .vl 文档的 lib/net8.0/
  • AppendTargetFrameworkToOutputPath:设置为 false,使 DLL 直接输出到目标文件夹

vvvv 如何使用 C# 代码

有两种将 C# 与 .vl 文档集成的工作流程:

源码项目引用(热重载):.vl 文档引用一个 .csproj。vvvv 通过 Roslyn 自行编译 .cs 源文件为内存中的程序集——无需 dotnet build。每次保存 .cs 文件时,vvvv 会自动检测更改并重新编译。在实时开发过程中不涉及 .csproj 中的输出路径;该路径用于 NuGet 打包和部署。

二进制引用(无热重载):.vl 文档引用预编译的 DLL 或 NuGet 包。要应用 C# 更改,需在外部重新构建(dotnet build)并重启 vvvv。这是大型项目和稳定库的标准工作流程。

着色器(.sdsl 文件)无论采用哪种工作流程,始终支持热重载。

对于 AI 代理:无论采用哪种工作流程,请运行 dotnet build 以验证代码是否可编译——您无法看到 vvvv 的编译器输出。对于源码项目引用,vvvv 会在文件保存时自动获取更改(无需重启)。对于二进制引用,需要 dotnet build,且用户必须重启 vvvv。

必需的全局引用

csharp
global using VL.Core;
global using VL.Core.Import;
global using VL.Lib.Collections;

必需的程序集属性

为了让 vvvv 发现您的 ProcessNode 和静态方法:

csharp
[assembly: ImportAsIs]

缺少此属性,您的节点将不会出现在 vvvv 节点浏览器中。

NuGet 包源

将以下内容添加到您的 NuGet.config 以获取 vvvv 包:

xml





NuGet 打包

要将您的插件作为 NuGet 包分发:

bash
nuget pack MyPlugin/deployment/MyPlugin.nuspec

.nuspec 应引用您的 .vl 文档、编译后的 DLL、着色器文件和帮助补丁。

常见 VL 包

用途
VL.Core核心类型、ProcessNode 属性、Spread
VL.Stride
3D 渲染、着色器集成 | | VL.Stride.Runtime | Stride 引擎运行时 | | VL.Core.Import | ImportAsIs 属性 | | VL.Lib.Collections | Spread、SpreadBuilder | | VL.Skia | 2D 渲染(Skia 图形引擎) | | VL.Fuse | GPU 可视化编程(着色器图) | | VL.IO.OSC | Open Sound Control 协议 | | VL.IO.MQTT | MQTT 消息传递 | | VL.IO.Redis | Redis 键值存储 | | VL.OpenCV | 计算机视觉(OpenCV 绑定) | | VL.MediaPipe | MediaPipe 机器学习管线(手部、面部、姿态) | | VL.Audio | 音频合成与输入/输出(基于 NAudio) | | VL.Devices.AzureKinect | Azure Kinect / Orbbec 深度相机 |

完整目录请参见 vvvv.org/packs

向量类型与 SIMD 策略

  • - 内部热点路径:使用 System.Numerics.Vector3/Vector4/Quaternion(通过 AVX/SSE 实现 SIMD)
  • 外部 API(Update 方法参数):使用 Stride.Core.Mathematics 类型(VL 要求)
  • 两者之间的零成本转换

csharp
using System.Runtime.CompilerServices;

// Stride → System.Numerics(零成本重新解释)
ref var numericsVec = ref Unsafe.As(ref strideVec);

// System.Numerics → Stride(零成本重新解释)
ref var strideVec = ref Unsafe.As(ref numericsVec);

这些类型具有相同的内存布局,使得 Unsafe.As 成为零成本操作。

IDisposable 与资源管理

任何持有原生/非托管资源的节点必须实现 IDisposable:

csharp
[ProcessNode]
public class NativeWrapper : IDisposable
{
private IntPtr _handle;

public NativeWrapper()
{
_handle = NativeLib.Create();
}

public void Update(out int result)
{
result = NativeLib.Process(_handle);
}

public void Dispose()
{
if (_handle != IntPtr.Zero)
{
NativeLib.Destroy(_handle);
_handle = IntPtr.Zero;
}
}
}

当节点被移除或文档关闭时,vvvv 会调用 Dispose()。

vvvv 中的异步模式

由于 Update() 在主线程上以 60 FPS 运行,长时间运行的操作必须异步执行:

csharp
[ProcessNode]
public class AsyncLoader
{
private Task? _loadTask;
private string _cachedResult = ;

public void Update(
out string result,
out bool isLoading,
string url = ,
bool trigger = false)
{
if (trigger && (loadTask == null || loadTask.IsCompleted))
{
_loadTask = Task.Run(() => LoadFromUrl(url));
}

isLoading = loadTask != null && !loadTask.IsCompleted;

if (_loadTask?.IsCompletedSuccessfully == true)
cachedResult = loadTask.Result;

result = _cachedResult;
}
}

用于 GPU/网络的可复制结构体

对于跨越 GPU 或网络边界的数据,请使用可复制结构体:

csharp
[StructLayout(LayoutKind.Sequential)]
public struct AnimationBlendState
{
public int ClipIndex1; // 4 字节
public float ClipTime1; // 4 字节
public int ClipIndex2; // 4 字节
public float ClipTime2; // 4 字节
public float BlendWeight; // 4 字节
}

规则:无引用类型字段,无 bool(使用 int),显式布局。支持 Span 访问和通过 MemoryMarshal 实现零拷贝序列化。

引用 vvvv 加载的 DLL

当引用已由 vvvv 加载的 DLL(例如 VL.Fuse)时,使用 false 防止复制:

xml

..\..\path\to\Fuse.dll
false

构建命令

构建 vvvv 插件项目:

bash
dotnet build src/MyPlugin.csproj -c Release

构建整个解决方案:

bash
dotnet build src/MyPlugin.sln -c Release

C++/CLI 互操作

用于包装原生 C/C++ 库:

bash
msbuild MyCLIWrapper/MyCLIWrapper.vcxproj /p:Configuration=Release /p:Platform=x64

C++/CLI 项目需要 Visual Studio(而非 dotnet CLI)进行构建。

常见包版本范围

引用 vvvv 包时,使用通配符版本以保持兼容性:

xml

这确保您的插件与目标 vvvv 版本的

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 vvvv-dotnet-1776205546 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 vvvv-dotnet-1776205546 技能

通过命令行安装

skillhub install vvvv-dotnet-1776205546

下载

⬇ 下载 vvvv-dotnet v1.0.1(免费)

文件大小: 5.75 KB | 发布时间: 2026-4-15 12:00

v1.0.1 最新 2026-4-15 12:00
Improved skill descriptions: better triggering for HLSL/shaders, Spreads/collections, ImportAsIs/dotnet, VL packages, reactive channels. Fixed broken cross-skill reference in troubleshooting.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部