270 {
271
272
273
274
275
276
277
278
281
282
283
285
286
287
289
290
294
296
297
299 {
300#if defined(FL_IS_AVR)
301
302
303
304 offset8 <<= 1;
305 asm volatile("");
306 offset8 <<= 1;
307 asm volatile("");
308 offset8 <<= 1;
309#else
310
311 offset8 <<= 3;
312#endif
313 }
314
315 fl::u8 third = scale8( offset8, (256 / 3));
316
318
319 if( ! (
hue & 0x80) ) {
320
321 if( ! (
hue & 0x40) ) {
322
323
324 if( ! (
hue & 0x20) ) {
325
326
327 r = K255 - third;
329 b = 0;
331 } else {
332
333
334 if( Y1 ) {
335 r = K171;
337 b = 0;
339 }
340 if( Y2 ) {
341 r = K170 + third;
342
343 fl::u8 twothirds = scale8( offset8, ((256 * 2) / 3));
345 b = 0;
347 }
348 }
349 } else {
350
351
352 if( ! (
hue & 0x20) ) {
353
354
355 if( Y1 ) {
356
357 fl::u8 twothirds = scale8( offset8, ((256 * 2) / 3));
358 r = K171 - twothirds;
360 b = 0;
362 }
363 if( Y2 ) {
364 r = K255 - offset8;
366 b = 0;
368 }
369 } else {
370
371
372 r = 0;
375 b = third;
376 }
377 }
378 } else {
379
380
381 if( ! (
hue & 0x40) ) {
382
383 if( ! (
hue & 0x20) ) {
384
385
386 r = 0;
388
389 fl::u8 twothirds = scale8( offset8, ((256 * 2) / 3));
390 g = K171 - twothirds;
391 b = K85 + twothirds;
392
393 } else {
394
395
396 r = third;
399 b = K255 - third;
400
401 }
402 } else {
403 if( ! (
hue & 0x20) ) {
404
405
406 r = K85 + third;
409 b = K171 - third;
410
411 } else {
412
413
414 r = K170 + third;
417 b = K85 - third;
418
419 }
420 }
421 }
422
423
424
426
427
428
429
430
431
432 if( Gscale )
g = scale8_video( g, Gscale);
433
434
435
436 if( sat != 255 ) {
437 if( sat == 0) {
438 r = 255; b = 255;
g = 255;
439 } else {
441 desat = scale8_video( desat, desat);
442
443 fl::u8 satscale = 255 - desat;
444
445
446
447#if (FASTLED_SCALE8_FIXED==1)
448 r = scale8_LEAVING_R1_DIRTY( r, satscale);
449 asm volatile("");
450 g = scale8_LEAVING_R1_DIRTY( g, satscale);
451 asm volatile("");
452 b = scale8_LEAVING_R1_DIRTY( b, satscale);
453 asm volatile("");
454 cleanup_R1();
455#else
456 if( r ) r = scale8( r, satscale) + 1;
457 if( g )
g = scale8( g, satscale) + 1;
458 if( b ) b = scale8( b, satscale) + 1;
459#endif
460 fl::u8 brightness_floor = desat;
461 r += brightness_floor;
462 g += brightness_floor;
463 b += brightness_floor;
464 }
465 }
466
467
468 if( val != 255 ) {
469
470
471
472 val = scale8_video( val, val);
473 if( val == 0 ) {
475 } else {
476
477#if (FASTLED_SCALE8_FIXED==1)
478 r = scale8_LEAVING_R1_DIRTY( r, val);
479 asm volatile("");
480 g = scale8_LEAVING_R1_DIRTY( g, val);
481 asm volatile("");
482 b = scale8_LEAVING_R1_DIRTY( b, val);
483 asm volatile("");
484 cleanup_R1();
485#else
486 if( r ) r = scale8( r, val) + 1;
487 if( g )
g = scale8( g, val) + 1;
488 if( b ) b = scale8( b, val) + 1;
489#endif
490 }
491 }
492
493
494
495
496
497
498
499 rgb.r = r;
501 rgb.b = b;
502}
fl::UISlider offset("Offset", 0.0f, 0.0f, 1.0f, 0.01f)
#define FORCE_REFERENCE(var)
Force a variable reference to avoid compiler over-optimization.