Thanks for your interest in contributing to DaroEngine2! This document covers everything you need to get started.
- Windows 10/11 (x64)
- Visual Studio 2022 or later with:
- C++ Desktop Development workload (for the engine)
- .NET Desktop Development workload (for the designer)
- .NET 10 SDK
- DirectX 11 compatible GPU
# Build the full solution
msbuild DaroEngine2.slnx /p:Configuration=Debug /p:Platform=x64The Designer's post-build step automatically copies DaroEngine.dll to its output folder.
For ProRes 4444 and Apple Animation video decoding with alpha:
.\setup-ffmpeg.ps1This downloads FFmpeg libraries to ThirdParty/ffmpeg/. The engine auto-detects FFmpeg at build time via __has_include.
- Exported functions:
Daro_prefix with__stdcallconvention - Classes: PascalCase (
Renderer,VideoPlayer) - Member variables:
m_prefix (m_Device,m_Context) - Global variables:
g_prefix (g_Renderer) - Constants:
DARO_prefix, UPPER_SNAKE_CASE (DARO_MAX_LAYERS) - Indentation: Tabs
- Private fields:
_prefix (_isRunning,_engineRenderer) - Namespace:
DaroDesigner - Methods/Properties: PascalCase
- Local variables: camelCase
- Indentation: 4 spaces
- Keep changes focused — one logical change per PR
- Match the style of surrounding code
- Use
CultureInfo.InvariantCulturefor all numeric parsing/formatting - P/Invoke structs must match C++ layout exactly (
Pack = 1,CharSet.Unicode)
DaroEngine2/
├── Engine/ # C++ DirectX 11 rendering engine
│ ├── DaroEngine.h # Public API declarations
│ ├── SharedTypes.h # DaroLayer struct and constants
│ ├── Renderer.cpp # DirectX 11 rendering
│ ├── VideoPlayer.cpp # Video decoding (MF + FFmpeg)
│ └── FrameBuffer.cpp # Shared memory for preview
├── Designer/ # C# WPF application
│ ├── MainWindow.xaml.cs # Main UI
│ ├── Engine/
│ │ ├── EngineInterop.cs # P/Invoke declarations
│ │ └── EngineRenderer.cs # Thread-safe engine wrapper
│ └── Models/
│ ├── LayerModel.cs # Layer properties and animation
│ ├── ProjectModel.cs # Scene serialization
│ └── AnimationModel.cs # Keyframe animation
├── GraphicsMiddleware/ # ASP.NET Core REST API
└── ThirdParty/ # External dependencies
- Fork the repository
- Create a branch from
mainfor your change:git checkout -b feature/my-feature
- Make your changes — keep commits focused and well-described
- Test your changes:
- Build succeeds:
msbuild DaroEngine2.slnx /p:Configuration=Debug /p:Platform=x64 - Designer launches and renders preview correctly
- If you changed the engine API, verify P/Invoke declarations still match
- Build succeeds:
- Push and open a pull request against
main - Describe what you changed and why in the PR description
Looking for something to work on? Here are areas where contributions would be especially valuable:
- Testing — Manual testing on different GPU hardware and Windows versions
- Documentation — Tutorials, video guides, example templates
- NDI Output — Adding NDI as an alternative to Spout
- Cross-platform — Investigating Vulkan backend for Linux support
- Performance — GPU profiling and optimization
- Accessibility — Keyboard navigation and screen reader support in the Designer
Check the issues for more specific tasks.
When filing a bug report, please include:
- Windows version and GPU model
- Steps to reproduce
- Expected vs actual behavior
- Relevant log output (check
DaroDesigner.log) - Screenshot or screen recording if it's a visual issue
For automation integration development, here's the command protocol:
Format: GUID|COMMAND\r\n
Commands:
0 = CUE → OK:CUED:{takes}:{name}
1 = PLAY → OK:PLAYING:{name}
2 = STOP → OK:STOPPED
3 = CONTINUE → OK:PLAYING
4 = PAUSE → OK:PAUSED
Error: ERROR:{message}
Port: 5555 (configurable via AppConstants.MosartPort)
By contributing, you agree that your contributions will be licensed under the MIT License.