Add right_to_left parameter to sweeping_rainbow shader and add sweeping_single_color_rainbow shader
This commit is contained in:
parent
77dd548c09
commit
29f9a71107
|
@ -548,6 +548,8 @@
|
|||
var field_value = parseInt($(inputs[i]).val());
|
||||
} else if (field_type == "color") {
|
||||
var field_value = hexToRGB($(inputs[i]).val());
|
||||
} else if (field_type == "checkbox") {
|
||||
var field_value = $(inputs[i]).prop("checked");
|
||||
} else {
|
||||
var field_value = $(inputs[i]).val();
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
cJSON* shader_get_available();
|
||||
color_rgb_t shader_static(uint16_t cb_i_display, uint16_t charBufSize, uint16_t displaySize, uint8_t character, color_rgb_t color);
|
||||
color_rgb_t shader_static_rainbow(uint16_t cb_i_display, uint16_t charBufSize, uint16_t displaySize, uint8_t character, uint8_t repeats);
|
||||
color_rgb_t shader_sweeping_rainbow(uint16_t cb_i_display, uint16_t charBufSize, uint16_t displaySize, uint8_t character, uint16_t speed, uint8_t repeats);
|
||||
color_rgb_t shader_sweeping_rainbow(uint16_t cb_i_display, uint16_t charBufSize, uint16_t displaySize, uint8_t character, uint16_t speed, uint8_t repeats, uint8_t rtl);
|
||||
color_rgb_t shader_sweeping_single_color_rainbow(uint16_t cb_i_display, uint16_t charBufSize, uint16_t displaySize, uint8_t character, uint16_t speed);
|
||||
color_rgb_t shader_linear_gradient(uint16_t cb_i_display, uint16_t charBufSize, uint16_t displaySize, uint8_t character, color_rgb_t start, color_rgb_t end, uint8_t repeats);
|
||||
color_rgb_t shader_fromJSON(uint16_t cb_i_display, uint16_t charBufSize, uint16_t displaySize, uint8_t character, cJSON* shaderData);
|
|
@ -21,7 +21,8 @@ enum shader_func {
|
|||
STATIC = 0,
|
||||
STATIC_RAINBOW = 1,
|
||||
SWEEPING_RAINBOW = 2,
|
||||
LINEAR_GRADIENT = 3,
|
||||
SWEEPING_SINGLE_COLOR_RAINBOW = 3,
|
||||
LINEAR_GRADIENT = 4,
|
||||
};
|
||||
|
||||
|
||||
|
@ -81,6 +82,28 @@ cJSON* shader_get_available() {
|
|||
cJSON_AddNumberToObject(param, "value", 1);
|
||||
cJSON_AddItemToObject(params, "repeats", param);
|
||||
|
||||
// Parameter: Right-to-Left
|
||||
param = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(param, "type", "checkbox");
|
||||
cJSON_AddBoolToObject(param, "checked", 0);
|
||||
cJSON_AddItemToObject(params, "right_to_left", param);
|
||||
|
||||
cJSON_AddItemToObject(shader_entry, "params", params);
|
||||
cJSON_AddItemToArray(shaders_arr, shader_entry);
|
||||
|
||||
// Shader: Sweeping Single Color Rainbow
|
||||
shader_entry = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(shader_entry, "name", "sweeping_single_color_rainbow");
|
||||
params = cJSON_CreateObject();
|
||||
|
||||
// Parameter: Speed
|
||||
param = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(param, "type", "range");
|
||||
cJSON_AddNumberToObject(param, "min", 1);
|
||||
cJSON_AddNumberToObject(param, "max", 1000);
|
||||
cJSON_AddNumberToObject(param, "value", 1);
|
||||
cJSON_AddItemToObject(params, "speed", param);
|
||||
|
||||
cJSON_AddItemToObject(shader_entry, "params", params);
|
||||
cJSON_AddItemToArray(shaders_arr, shader_entry);
|
||||
|
||||
|
@ -127,11 +150,15 @@ color_rgb_t shader_static_rainbow(uint16_t cb_i_display, uint16_t charBufSize, u
|
|||
return hsv2rgb(calcColor_hsv);
|
||||
}
|
||||
|
||||
color_rgb_t shader_sweeping_rainbow(uint16_t cb_i_display, uint16_t charBufSize, uint16_t displaySize, uint8_t character, uint16_t speed, uint8_t repeats) {
|
||||
color_rgb_t shader_sweeping_rainbow(uint16_t cb_i_display, uint16_t charBufSize, uint16_t displaySize, uint8_t character, uint16_t speed, uint8_t repeats, uint8_t rtl) {
|
||||
color_hsv_t calcColor_hsv;
|
||||
uint16_t span = displaySize / repeats;
|
||||
if (span == 0) span = 1;
|
||||
calcColor_hsv.h = (cb_i_display % span) * (360 / span);
|
||||
if (rtl) {
|
||||
calcColor_hsv.h = (cb_i_display % span) * (360 / span);
|
||||
} else {
|
||||
calcColor_hsv.h = ((charBufSize - cb_i_display) % span) * (360 / span);
|
||||
}
|
||||
calcColor_hsv.h += (double)speed * (double)time_getSystemTime_us() / 1000000.0;
|
||||
calcColor_hsv.h = (uint16_t)fmod(calcColor_hsv.h, 360.0);
|
||||
calcColor_hsv.s = 1.0;
|
||||
|
@ -139,6 +166,15 @@ color_rgb_t shader_sweeping_rainbow(uint16_t cb_i_display, uint16_t charBufSize,
|
|||
return hsv2rgb(calcColor_hsv);
|
||||
}
|
||||
|
||||
color_rgb_t shader_sweeping_single_color_rainbow(uint16_t cb_i_display, uint16_t charBufSize, uint16_t displaySize, uint8_t character, uint16_t speed) {
|
||||
color_hsv_t calcColor_hsv;
|
||||
calcColor_hsv.h = (double)speed * (double)time_getSystemTime_us() / 1000000.0;
|
||||
calcColor_hsv.h = (uint16_t)fmod(calcColor_hsv.h, 360.0);
|
||||
calcColor_hsv.s = 1.0;
|
||||
calcColor_hsv.v = 1.0;
|
||||
return hsv2rgb(calcColor_hsv);
|
||||
}
|
||||
|
||||
color_rgb_t shader_linear_gradient(uint16_t cb_i_display, uint16_t charBufSize, uint16_t displaySize, uint8_t character, color_rgb_t start, color_rgb_t end, uint8_t repeats) {
|
||||
color_rgb_t calcColor;
|
||||
uint16_t span = displaySize / repeats;
|
||||
|
@ -203,8 +239,22 @@ color_rgb_t shader_fromJSON(uint16_t cb_i_display, uint16_t charBufSize, uint16_
|
|||
cJSON* repeats_field = cJSON_GetObjectItem(params, "repeats");
|
||||
if (!cJSON_IsNumber(repeats_field)) return fallback;
|
||||
uint8_t repeats = (uint8_t)cJSON_GetNumberValue(repeats_field);
|
||||
|
||||
cJSON* rtl_field = cJSON_GetObjectItem(params, "right_to_left");
|
||||
if (!cJSON_IsBool(rtl_field)) return fallback;
|
||||
uint8_t rtl = (uint8_t)cJSON_IsTrue(rtl_field);
|
||||
|
||||
color_rgb_t color = shader_sweeping_rainbow(cb_i_display, charBufSize, displaySize, character, speed, repeats);
|
||||
color_rgb_t color = shader_sweeping_rainbow(cb_i_display, charBufSize, displaySize, character, speed, repeats, rtl);
|
||||
ESP_LOGV(LOG_TAG, "shader=%p shaderId=%u color=%.2f, %.2f, %.2f", shaderData, shaderId, color.r, color.g, color.b);
|
||||
return color;
|
||||
}
|
||||
|
||||
case SWEEPING_SINGLE_COLOR_RAINBOW: {
|
||||
cJSON* speed_field = cJSON_GetObjectItem(params, "speed");
|
||||
if (!cJSON_IsNumber(speed_field)) return fallback;
|
||||
uint16_t speed = (uint16_t)cJSON_GetNumberValue(speed_field);
|
||||
|
||||
color_rgb_t color = shader_sweeping_single_color_rainbow(cb_i_display, charBufSize, displaySize, character, speed);
|
||||
ESP_LOGV(LOG_TAG, "shader=%p shaderId=%u color=%.2f, %.2f, %.2f", shaderData, shaderId, color.r, color.g, color.b);
|
||||
return color;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue