269{
270
271
272
273
274
275
276
277
280
281
282
284
285
286
288
289
293
295
296
298 {
299#if defined(FL_IS_AVR)
300
301
302
303 offset8 <<= 1;
304 asm volatile("");
305 offset8 <<= 1;
306 asm volatile("");
307 offset8 <<= 1;
308#else
309
310 offset8 <<= 3;
311#endif
312 }
313
314 fl::u8 third = scale8( offset8, (256 / 3));
315
317
318 if( ! (
hue & 0x80) ) {
319
320 if( ! (
hue & 0x40) ) {
321
322
323 if( ! (
hue & 0x20) ) {
324
325
326 r = K255 - third;
327 g = third;
328 b = 0;
330 } else {
331
332
333 if( Y1 ) {
334 r = K171;
335 g = K85 + third ;
336 b = 0;
338 }
339 if( Y2 ) {
340 r = K170 + third;
341
342 fl::u8 twothirds = scale8( offset8, ((256 * 2) / 3));
343 g = K85 + twothirds;
344 b = 0;
346 }
347 }
348 } else {
349
350
351 if( ! (
hue & 0x20) ) {
352
353
354 if( Y1 ) {
355
356 fl::u8 twothirds = scale8( offset8, ((256 * 2) / 3));
357 r = K171 - twothirds;
358 g = K170 + third;
359 b = 0;
361 }
362 if( Y2 ) {
363 r = K255 - offset8;
364 g = K255;
365 b = 0;
367 }
368 } else {
369
370
371 r = 0;
373 g = K255 - third;
374 b = third;
375 }
376 }
377 } else {
378
379
380 if( ! (
hue & 0x40) ) {
381
382 if( ! (
hue & 0x20) ) {
383
384
385 r = 0;
387
388 fl::u8 twothirds = scale8( offset8, ((256 * 2) / 3));
389 g = K171 - twothirds;
390 b = K85 + twothirds;
391
392 } else {
393
394
395 r = third;
396 g = 0;
398 b = K255 - third;
399
400 }
401 } else {
402 if( ! (
hue & 0x20) ) {
403
404
405 r = K85 + third;
406 g = 0;
408 b = K171 - third;
409
410 } else {
411
412
413 r = K170 + third;
414 g = 0;
416 b = K85 - third;
417
418 }
419 }
420 }
421
422
423
424 if( G2 ) g = g >> 1;
425 if( Gscale ) g = scale8_video_LEAVING_R1_DIRTY( g, Gscale);
426
427
428
429 if( sat != 255 ) {
430 if( sat == 0) {
431 r = 255; b = 255; g = 255;
432 } else {
434 desat = scale8_video( desat, desat);
435
436 fl::u8 satscale = 255 - desat;
437
438
439
440#if (FASTLED_SCALE8_FIXED==1)
441 r = scale8_LEAVING_R1_DIRTY( r, satscale);
442 asm volatile("");
443 g = scale8_LEAVING_R1_DIRTY( g, satscale);
444 asm volatile("");
445 b = scale8_LEAVING_R1_DIRTY( b, satscale);
446 asm volatile("");
447 cleanup_R1();
448#else
449 if( r ) r = scale8( r, satscale) + 1;
450 if( g ) g = scale8( g, satscale) + 1;
451 if( b ) b = scale8( b, satscale) + 1;
452#endif
453 fl::u8 brightness_floor = desat;
454 r += brightness_floor;
455 g += brightness_floor;
456 b += brightness_floor;
457 }
458 }
459
460
461 if( val != 255 ) {
462
463 val = scale8_video_LEAVING_R1_DIRTY( val, val);
464 if( val == 0 ) {
465 r=0; g=0; b=0;
466 } else {
467
468#if (FASTLED_SCALE8_FIXED==1)
469 r = scale8_LEAVING_R1_DIRTY( r, val);
470 asm volatile("");
471 g = scale8_LEAVING_R1_DIRTY( g, val);
472 asm volatile("");
473 b = scale8_LEAVING_R1_DIRTY( b, val);
474 asm volatile("");
475 cleanup_R1();
476#else
477 if( r ) r = scale8( r, val) + 1;
478 if( g ) g = scale8( g, val) + 1;
479 if( b ) b = scale8( b, val) + 1;
480#endif
481 }
482 }
483
484
485
486
487
488
489
490 rgb.r = r;
491 rgb.g = g;
492 rgb.b = b;
493}
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.