Skip to content

DarthAffe/RGB.NET

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
January 6, 2023 17:26
January 6, 2023 17:26
January 6, 2023 17:26
January 6, 2023 17:26
November 13, 2022 15:33
January 14, 2017 16:19
December 26, 2022 00:50
September 25, 2022 15:25

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);