@@ -1035,6 +1035,7 @@ BusHub75Matrix::BusHub75Matrix(BusConfig &bc) : Bus(bc.type, bc.start, bc.autoWh
10351035
10361036 USER_PRINT (F (" heap usage: " )); USER_PRINTLN (int (lastHeap - ESP.getFreeHeap ()));
10371037 delay (18 ); // experiment - give the driver a moment (~ one full frame @ 60hz) to settle
1038+ _colorOrder = bc.colorOrder ;
10381039 _valid = true ;
10391040 display->setBrightness8 (_bri); // range is 0-255, 0 - 0%, 255 - 100% // [setBrightness()] Tried to set output brightness before begin()
10401041 display->clearScreen (); // initially clear the screen buffer
@@ -1196,8 +1197,19 @@ void __attribute__((hot)) IRAM_ATTR BusHub75Matrix::show(void) {
11961197 uint8_t g = c.g ;
11971198 uint8_t b = c.b ;
11981199 #endif
1199- if (isFourScan) fourScanPanel->drawPixelRGB888 (int16_t (x), int16_t (y), r, g, b);
1200- else display->drawPixelRGB888 (int16_t (x), int16_t (y), r, g, b);
1200+ // apply color order mapping (COL_ORDER_* values from const.h)
1201+ uint8_t r2=r, g2=g, b2=b;
1202+ switch (_colorOrder & 0x0F ) {
1203+ case COL_ORDER_RGB: /* 1 */ break ; // no swap (HUB75 default)
1204+ case COL_ORDER_GRB: /* 0 */ r2=g; g2=r; break ; // swap R and G
1205+ case COL_ORDER_BRG: /* 2 */ r2=b; g2=r; b2=g; break ;
1206+ case COL_ORDER_RBG: /* 3 */ g2=b; b2=g; break ; // swap G and B
1207+ case COL_ORDER_BGR: /* 4 */ r2=b; b2=r; break ; // swap R and B
1208+ case COL_ORDER_GBR: /* 5 */ r2=g; g2=b; b2=r; break ;
1209+ default : break ;
1210+ }
1211+ if (isFourScan) fourScanPanel->drawPixelRGB888 (int16_t (x), int16_t (y), r2, g2, b2);
1212+ else display->drawPixelRGB888 (int16_t (x), int16_t (y), r2, g2, b2);
12011213 }
12021214 pix ++;
12031215 }
0 commit comments