diff --git a/RGBController/RGBController.cpp b/RGBController/RGBController.cpp index ce57a19b..b6f92e4d 100644 --- a/RGBController/RGBController.cpp +++ b/RGBController/RGBController.cpp @@ -2132,12 +2132,18 @@ void RGBController::DeviceCallThreadFunction() { if(flags & CONTROLLER_FLAG_RESET_BEFORE_UPDATE) { - AccessMutex.lock_shared(); CallFlag_UpdateLEDs = false; - DeviceMutex.lock(); - DeviceUpdateLEDs(colors); - DeviceMutex.unlock(); + } + + if(flags & CONTROLLER_FLAG_SUPPORTS_PASSING_COLORS_REFERENCE) + { + AccessMutex.lock_shared(); + std::vector update_colors = colors; AccessMutex.unlock_shared(); + + DeviceMutex.lock(); + DeviceUpdateLEDs(update_colors); + DeviceMutex.unlock(); } else { @@ -2145,9 +2151,13 @@ void RGBController::DeviceCallThreadFunction() DeviceMutex.lock(); DeviceUpdateLEDs(colors); DeviceMutex.unlock(); - CallFlag_UpdateLEDs = false; AccessMutex.unlock_shared(); } + + if(!(flags & CONTROLLER_FLAG_RESET_BEFORE_UPDATE))) + { + CallFlag_UpdateLEDs = false; + } } else { diff --git a/RGBController/RGBControllerInterface.h b/RGBController/RGBControllerInterface.h index 0846f093..dabfeae4 100644 --- a/RGBController/RGBControllerInterface.h +++ b/RGBController/RGBControllerInterface.h @@ -225,6 +225,8 @@ enum CONTROLLER_FLAG_RESET_BEFORE_UPDATE = (1 << 8), /* Device resets update flag before */ /* calling update function */ + CONTROLLER_FLAG_SUPPORTS_PASSING_COLORS_REFERENCE = (1 << 9), /* Device supports passing arbitrary colors data to */ + /* DeviceUpdateLEDs() */ CONTROLLER_FLAG_MANUALLY_CONFIGURABLE_NAME = (1 << 16),/* Device name is manually configurable */ CONTROLLER_FLAG_MANUALLY_CONFIGURABLE_DEVICE_SPECIFIC = (1 << 17),/* Device dev-specific cfg manually configurable */