WS281X-Device-Implementations of RGB.NET


Keywords
asus, aura, coolermaster, corsair, dmx, led, logitech, msi, novation, openrgb, peripherals, razer, rgb, steelseries, wled, wooting
License
LGPL-2.1-only
Install
Install-Package RGB.NET.Devices.WS281X -Version 2.1.0-prerelease.11

Documentation

RGB.NET

GitHub release (latest by date) Nuget GitHub GitHub Repo stars Discord

IMPORTANT NOTE
This is a library to integrate RGB-devices into your own application. It does not contain any executables!
If you're looking for a full blown software solution to manage your RGB-devices, take a look at Artemis.

Getting Started

Setup

  1. Add the RGB.NET.Core and Devices-Nugets for all devices you want to use.
  2. For some of the vendors SDK-libraries are needed. Check the contained Readmes for more information in that case.
  3. Create a new RGBSurface.
RGBSurface surface = new RGBSurface();
  1. Initialize the providers for all devices you want to use and add the devices to the surface. For example:
CorsairDeviceProvider.Instance.Initialize(throwExceptions: true);
surface.Attach(CorsairDeviceProvider.Instance.Devices);

The Initialize-method allows to load only devices of specific types by setting a filter and for debugging purposes allows to enable exception throwing. (By default they are catched and provided through the Exception-event.) You can also use the Load-Extension on the surface.

surface.Load(CorsairDeviceProvider.Instance);

While most device-providers are implemented in a way that supports fast loading like this some may have a different loading procedures. (For example the WS281XDeviceProvider requires device-definitions before loading.)

  1. Add an update-trigger. In most cases the TimerUpdateTrigger is preferable, but you can also implement your own to fit your needs.
surface.RegisterUpdateTrigger(new TimerUpdateTrigger());

If you want to trigger updates manually the ManualUpdateTrigger should be used.

  1. This step is optional but recommended. For rendering the location of each LED on the surface can be important. Since not all SDKs provide useful layout-information you might want to add Layouts to your devices. (TODO: add wiki article for this) Same goes for the location of the device on the surface. If you don't care about the exact location of the devices you can use:
surface.AlignDevices();

The basic setup is now complete and you can start setting up your rendering.

Basic Rendering

As an example we'll add a moving rainbow over all devices on the surface.

  1. Create a led-group containing all leds on the surface (all devices)
ILedGroup allLeds = new ListLedGroup(surface, surface.Leds);
  1. Create a rainbow-gradient.
RainbowGradient rainbow = new RainbowGradient();
  1. Add a decorator to the gradient to make it move. (Decorators are
rainbow.AddDecorator(new MoveGradientDecorator(surface));
  1. Create a texture (the size - in this example 10, 10 - is not important here since the gradient shoukd be stretched anyway)
ITexture texture = new ConicalGradientTexture(new Size(10, 10), rainbow);
  1. Add a brush rendering the texture to the led-group
allLeds.Brush = new TextureBrush(texture);

Full example

RGBSurface surface = new RGBSurface();
surface.Load(CorsairDeviceProvider.Instance);
surface.AlignDevices();

surface.RegisterUpdateTrigger(new TimerUpdateTrigger());

ILedGroup allLeds = new ListLedGroup(surface, surface.Leds);
RainbowGradient rainbow = new RainbowGradient();
rainbow.AddDecorator(new MoveGradientDecorator(surface));
ITexture texture = new ConicalGradientTexture(new Size(10, 10), rainbow);
allLeds.Brush = new TextureBrush(texture);