Thank you for your interest in contributing to VL.Fuse! This guide will help you get started.
- vvvv gamma (latest version)
- Visual Studio 2022 or Rider
- .NET 8.0 SDK
- Git
-
Clone the repository:
git clone https://github.com/TheFuseLab/VL.Fuse.git cd VL.Fuse -
Build the C# project:
dotnet build src/Fuse/Fuse.csproj
-
Open vvvv gamma and reference the local VL.Fuse package
-
Create the C# class in
src/Fuse/:namespace Fuse; public class MyNewOperation<T> : ResultNode<T> where T : struct { public MyNewOperation(NodeContext nodeContext, ShaderNode<T> input) : base(nodeContext, "MyNewOperation") { SetInputs(new AbstractShaderNode[] { input }); } protected override string ImplementationTemplate() { return "myShaderFunction(${arguments})"; } }
-
Add SDSL function (if needed) in
vl/shaders/:// In appropriate FuseCommon*.sdsl or new file float myShaderFunction(float input) { return input * 2.0; }
-
Create VL node by exposing the C# class in the appropriate
.vlfile -
Add help patch in
help/[Category]/:- Create a reference patch showing basic usage
- Add a HowTo patch for common use cases
-
Identify the appropriate shader file in
vl/shaders/ -
Add the function with documentation:
// @purpose: Brief description of what this does // @param paramName: What this parameter represents // @returns: What the function returns float3 myNewFunction(float3 position, float scale) { return position * scale; }
-
Create a C# node to expose it (see above)
- Read the existing code first
- Understand the dependencies and callers
- Make minimal, focused changes
- Test with existing help patches
- Update documentation if behavior changes
Use conventional commits for clear history:
feat(compute): add parallel reduction support
fix(sdf): correct smooth union calculation
docs(help): add SDF boolean operations tutorial
refactor(core): simplify visitor traversal
test(noise): add Perlin noise validation patch
chore(build): update Stride dependency
Format: type(scope): description
Types:
feat- New featurefix- Bug fixdocs- Documentation onlyrefactor- Code change that neither fixes a bug nor adds a featuretest- Adding or modifying testschore- Build process or auxiliary tool changes
See PATTERNS.md for detailed patterns. Key points:
NodeContextis always the first constructor parameter- Use
SetInputs()to set node inputs - Register dependencies via
AddProperty() - Follow existing naming conventions
- Add XML documentation to public classes and methods
- Create help patches for new features
- Update ARCHITECTURE.md for architectural changes
- Add ADR for significant design decisions
- Open vvvv gamma
- Load relevant help patches
- Test with various input combinations
- Verify GPU output is correct
- Node compiles without errors
- Generated SDSL is valid
- Shader compiles in Stride
- Visual output matches expected behavior
- Performance is acceptable
- Help patch works correctly
-
Create a branch from
1.0:git checkout -b feature/my-new-feature
-
Make your changes following the code style guidelines
-
Test thoroughly using help patches
-
Commit with conventional commit messages
-
Push and create a Pull Request
-
Fill out the PR template completely
-
Address review feedback promptly
- Clear description of changes
- Affected domains identified
- Breaking changes noted
- Help patches added/updated for new features
- All existing patches still work
- Open an issue for bugs or feature requests
- Join the Element chat for discussions
- Check existing issues before creating new ones
By contributing, you agree that your contributions will be licensed under the MIT License.