@@ -1397,6 +1397,62 @@ void Visualizer::OpenRGBDisconnect(NetworkClient * client)
1397
1397
}
1398
1398
}
1399
1399
1400
+ static void SetupMatrixGrid (int x_count, int y_count, int * x_idx_list, int * y_idx_list)
1401
+ {
1402
+ for (int x = 0 ; x < x_count; x++)
1403
+ {
1404
+ if (x_count < 10 )
1405
+ {
1406
+ x_idx_list[x] = (int )((x * (SPECTROGRAPH_COLS / (x_count))) + (0 .5f * (SPECTROGRAPH_COLS / (x_count))));
1407
+ }
1408
+ else if (x < ((x_count) / 2 ))
1409
+ {
1410
+ x_idx_list[x] = (int )((x * (SPECTROGRAPH_COLS / (x_count - 1 ))) + (0 .5f * (SPECTROGRAPH_COLS / (x_count - 1 ))));
1411
+ }
1412
+ else
1413
+ {
1414
+ x_idx_list[x] = (int )((x * (SPECTROGRAPH_COLS / (x_count - 1 ))) - (0 .5f * (SPECTROGRAPH_COLS / (x_count - 1 ))));
1415
+ }
1416
+
1417
+ }
1418
+ for (int y = 0 ; y < y_count; y++)
1419
+ {
1420
+ y_idx_list[y] = (int )(ROW_IDX_SPECTROGRAPH_TOP + (y * (SPECTROGRAPH_ROWS / y_count)) + (0 .5f * (SPECTROGRAPH_ROWS / y_count)));
1421
+ }
1422
+ }
1423
+
1424
+ static void SetupLinearGrid (int x_count, int * x_idx_list)
1425
+ {
1426
+ if ((x_count % 2 ) == 0 )
1427
+ {
1428
+ // Even number of LEDs
1429
+ for (int x = 0 ; x < x_count; x++)
1430
+ {
1431
+ x_idx_list[x] = (int )((float )x * (256 .0f / (float )x_count)) + (128 .0f / (float )x_count);
1432
+ }
1433
+ }
1434
+ else
1435
+ {
1436
+ // Odd number of LEDs
1437
+ for (int x = 0 ; x < x_count; x++)
1438
+ {
1439
+ if (x == (x_count / 2 ))
1440
+ {
1441
+ x_idx_list[x] = 128 ;
1442
+ }
1443
+ else if (x < ((x_count / 2 ) + 1 ))
1444
+ {
1445
+ x_idx_list[x] = (x_count / 2 ) + ((x + 1 ) * (256 / (x_count + 1 )));
1446
+ }
1447
+ else
1448
+ {
1449
+ x_idx_list[x] = ((x_count / 2 ) + 1 ) + (x * (256 / (x_count + 1 )));
1450
+ }
1451
+
1452
+ }
1453
+ }
1454
+ }
1455
+
1400
1456
void Visualizer::LEDUpdateThreadFunction ()
1401
1457
{
1402
1458
while (1 )
@@ -1412,20 +1468,28 @@ void Visualizer::LEDUpdateThreadFunction()
1412
1468
case ZONE_TYPE_MATRIX:
1413
1469
if (rgb_controllers[c]->zones [z].matrix_map != NULL )
1414
1470
{
1415
- for (int y = 0 ; y < rgb_controllers[c]->zones [z].matrix_map ->height ; y++)
1471
+ int x_count = rgb_controllers[c]->zones [z].matrix_map ->width ;
1472
+ int y_count = rgb_controllers[c]->zones [z].matrix_map ->height ;
1473
+ int * ZoneXIndex = new int [x_count];
1474
+ int * ZoneYIndex = new int [y_count];
1475
+
1476
+ SetupMatrixGrid (x_count, y_count, ZoneXIndex, ZoneYIndex);
1477
+
1478
+ for (int y = 0 ; y < y_count; y++)
1416
1479
{
1417
- for (int x = 0 ; x < rgb_controllers[c]-> zones [z]. matrix_map -> width ; x++)
1480
+ for (int x = 0 ; x < x_count ; x++)
1418
1481
{
1419
1482
unsigned int map_idx = (y * rgb_controllers[c]->zones [z].matrix_map ->width ) + x;
1420
1483
unsigned int color_idx = rgb_controllers[c]->zones [z].matrix_map ->map [map_idx];
1421
1484
if ( color_idx != 0xFFFFFFFF )
1422
1485
{
1423
- unsigned int pixels_y = 2 + y * (62 / rgb_controllers[c]->zones [z].matrix_map ->height );
1424
- unsigned int pixels_x = x * (256 / rgb_controllers[c]->zones [z].matrix_map ->width );
1425
- rgb_controllers[c]->zones [z].colors [color_idx] = pixels_out->pixels [pixels_y][pixels_x];
1486
+ rgb_controllers[c]->zones [z].colors [color_idx] = pixels_out->pixels [ZoneYIndex[y]][ZoneXIndex[x]];
1426
1487
}
1427
1488
}
1428
1489
}
1490
+
1491
+ delete[] ZoneXIndex;
1492
+ delete[] ZoneYIndex;
1429
1493
}
1430
1494
else
1431
1495
{
@@ -1444,10 +1508,17 @@ void Visualizer::LEDUpdateThreadFunction()
1444
1508
break ;
1445
1509
1446
1510
case ZONE_TYPE_LINEAR:
1447
- for (int r = 0 ; r < rgb_controllers[c]->zones [z].leds_count ; r++)
1511
+ unsigned int num_leds = rgb_controllers[c]->zones [z].leds_count ;
1512
+ int * ZoneXIndex = new int [num_leds];
1513
+
1514
+ SetupLinearGrid (num_leds, ZoneXIndex);
1515
+
1516
+ for (int x = 0 ; x < rgb_controllers[c]->zones [z].leds_count ; x++)
1448
1517
{
1449
- rgb_controllers[c]->zones [z].colors [r ] = pixels_out->pixels [ROW_IDX_BAR_GRAPH][r * ( 256 / rgb_controllers[c]-> zones [z]. leds_count ) ];
1518
+ rgb_controllers[c]->zones [z].colors [x ] = pixels_out->pixels [ROW_IDX_BAR_GRAPH][ZoneXIndex[x] ];
1450
1519
}
1520
+
1521
+ delete[] ZoneXIndex;
1451
1522
break ;
1452
1523
}
1453
1524
}
0 commit comments