浏览代码

Call nk_rawfb_color2int once per command

Cameron Cawley 7 月之前
父节点
当前提交
fa52f343ee
共有 1 个文件被更改,包括 55 次插入50 次删除
  1. 55 50
      demo/rawfb/nuklear_rawfb.h

+ 55 - 50
demo/rawfb/nuklear_rawfb.h

@@ -71,6 +71,7 @@ struct rawfb_context {
     struct rawfb_image font_tex;
     struct rawfb_image font_tex;
     struct nk_font_atlas atlas;
     struct nk_font_atlas atlas;
 };
 };
+typedef unsigned int rawfb_color;
 
 
 #ifndef MIN
 #ifndef MIN
 #define MIN(a,b) ((a) < (b) ? (a) : (b))
 #define MIN(a,b) ((a) < (b) ? (a) : (b))
@@ -79,37 +80,36 @@ struct rawfb_context {
 #define MAX(a,b) ((a) < (b) ? (b) : (a))
 #define MAX(a,b) ((a) < (b) ? (b) : (a))
 #endif
 #endif
 
 
-static unsigned int
-nk_rawfb_color2int(const struct nk_color c, const struct rawfb_pl pl)
+static rawfb_color
+nk_rawfb_color2int(const struct nk_color c, const struct rawfb_pl *pl)
 {
 {
     unsigned int res = 0;
     unsigned int res = 0;
 
 
-    res |= (c.r >> pl.rloss) << pl.rshift;
-    res |= (c.g >> pl.gloss) << pl.gshift;
-    res |= (c.b >> pl.bloss) << pl.bshift;
-    res |= (c.a >> pl.aloss) << pl.ashift;
+    res |= (c.r >> pl->rloss) << pl->rshift;
+    res |= (c.g >> pl->gloss) << pl->gshift;
+    res |= (c.b >> pl->bloss) << pl->bshift;
+    res |= (c.a >> pl->aloss) << pl->ashift;
 
 
     return (res);
     return (res);
 }
 }
 
 
 static struct nk_color
 static struct nk_color
-nk_rawfb_int2color(const unsigned int i, const struct rawfb_pl pl)
+nk_rawfb_int2color(const rawfb_color i, const struct rawfb_pl *pl)
 {
 {
     struct nk_color col = {0,0,0,0};
     struct nk_color col = {0,0,0,0};
 
 
-    col.r = (pl.rloss == 8) ? 0xff : ((i >> pl.rshift) << pl.rloss) & 0xff;
-    col.g = (pl.gloss == 8) ? 0xff : ((i >> pl.gshift) << pl.gloss) & 0xff;
-    col.b = (pl.bloss == 8) ? 0xff : ((i >> pl.bshift) << pl.bloss) & 0xff;
-    col.a = (pl.aloss == 8) ? 0xff : ((i >> pl.ashift) << pl.aloss) & 0xff;
+    col.r = (pl->rloss == 8) ? 0xff : ((i >> pl->rshift) << pl->rloss) & 0xff;
+    col.g = (pl->gloss == 8) ? 0xff : ((i >> pl->gshift) << pl->gloss) & 0xff;
+    col.b = (pl->bloss == 8) ? 0xff : ((i >> pl->bshift) << pl->bloss) & 0xff;
+    col.a = (pl->aloss == 8) ? 0xff : ((i >> pl->ashift) << pl->aloss) & 0xff;
 
 
     return col;
     return col;
 }
 }
 
 
 static void
 static void
 nk_rawfb_ctx_setpixel(const struct rawfb_context *rawfb,
 nk_rawfb_ctx_setpixel(const struct rawfb_context *rawfb,
-    const short x0, const short y0, const struct nk_color col)
+    const short x0, const short y0, const rawfb_color col)
 {
 {
-    unsigned int c = nk_rawfb_color2int(col, rawfb->fb.pl);
     unsigned char *pixels = rawfb->fb.pixels;
     unsigned char *pixels = rawfb->fb.pixels;
 
 
     pixels += y0 * rawfb->fb.pitch;
     pixels += y0 * rawfb->fb.pitch;
@@ -118,18 +118,18 @@ nk_rawfb_ctx_setpixel(const struct rawfb_context *rawfb,
         x0 >= rawfb->scissors.x && x0 < rawfb->scissors.w) {
         x0 >= rawfb->scissors.x && x0 < rawfb->scissors.w) {
 
 
         if (rawfb->fb.pl.bytesPerPixel == sizeof(unsigned int)) {
         if (rawfb->fb.pl.bytesPerPixel == sizeof(unsigned int)) {
-            *((unsigned int *)pixels + x0) = c;
+            *((unsigned int *)pixels + x0) = col;
         } else if (rawfb->fb.pl.bytesPerPixel == sizeof(unsigned short)) {
         } else if (rawfb->fb.pl.bytesPerPixel == sizeof(unsigned short)) {
-            *((unsigned short *)pixels + x0) = c;
+            *((unsigned short *)pixels + x0) = col;
         } else {
         } else {
-            *((unsigned char *)pixels + x0) = c;
+            *((unsigned char *)pixels + x0) = col;
         }
         }
     }
     }
 }
 }
 
 
 static void
 static void
 nk_rawfb_line_horizontal(const struct rawfb_context *rawfb,
 nk_rawfb_line_horizontal(const struct rawfb_context *rawfb,
-    const short x0, const short y, const short x1, const struct nk_color col)
+    const short x0, const short y, const short x1, const rawfb_color col)
 {
 {
     /* This function is called the most. Try to optimize it a bit...
     /* This function is called the most. Try to optimize it a bit...
      * It does not check for scissors or image borders.
      * It does not check for scissors or image borders.
@@ -144,13 +144,13 @@ nk_rawfb_line_horizontal(const struct rawfb_context *rawfb,
     n = (x1 - x0) * bpp;
     n = (x1 - x0) * bpp;
     if (bpp == sizeof(unsigned int)) {
     if (bpp == sizeof(unsigned int)) {
         for (i = 0; i < sizeof(c) / bpp; i++)
         for (i = 0; i < sizeof(c) / bpp; i++)
-            ((unsigned int *)c)[i] = nk_rawfb_color2int(col, rawfb->fb.pl);
+            ((unsigned int *)c)[i] = col;
     } else if (bpp == sizeof(unsigned short)) {
     } else if (bpp == sizeof(unsigned short)) {
         for (i = 0; i < sizeof(c) / bpp; i++)
         for (i = 0; i < sizeof(c) / bpp; i++)
-            ((unsigned short *)c)[i] = nk_rawfb_color2int(col, rawfb->fb.pl);
+            ((unsigned short *)c)[i] = col;
     } else {
     } else {
         for (i = 0; i < sizeof(c) / bpp; i++)
         for (i = 0; i < sizeof(c) / bpp; i++)
-            ((unsigned char *)c)[i] = nk_rawfb_color2int(col, rawfb->fb.pl);
+            ((unsigned char *)c)[i] = col;
     }
     }
 
 
     while (n > sizeof(c)) {
     while (n > sizeof(c)) {
@@ -164,7 +164,7 @@ static void
 nk_rawfb_img_setpixel(const struct rawfb_image *img,
 nk_rawfb_img_setpixel(const struct rawfb_image *img,
     const int x0, const int y0, const struct nk_color col)
     const int x0, const int y0, const struct nk_color col)
 {
 {
-    unsigned int c = nk_rawfb_color2int(col, img->pl);
+    unsigned int c = nk_rawfb_color2int(col, &img->pl);
     unsigned char *ptr;
     unsigned char *ptr;
     NK_ASSERT(img);
     NK_ASSERT(img);
     if (y0 < img->h && y0 >= 0 && x0 >= 0 && x0 < img->w) {
     if (y0 < img->h && y0 >= 0 && x0 >= 0 && x0 < img->w) {
@@ -192,13 +192,13 @@ nk_rawfb_img_getpixel(const struct rawfb_image *img, const int x0, const int y0)
 
 
         if (img->pl.bytesPerPixel == sizeof(unsigned int)) {
         if (img->pl.bytesPerPixel == sizeof(unsigned int)) {
             pixel = ((unsigned int *)ptr)[x0];
             pixel = ((unsigned int *)ptr)[x0];
-            col = nk_rawfb_int2color(pixel, img->pl);
+            col = nk_rawfb_int2color(pixel, &img->pl);
         } else if (img->pl.bytesPerPixel == sizeof(unsigned short)) {
         } else if (img->pl.bytesPerPixel == sizeof(unsigned short)) {
             pixel = ((unsigned short *)ptr)[x0];
             pixel = ((unsigned short *)ptr)[x0];
-            col = nk_rawfb_int2color(pixel, img->pl);
+            col = nk_rawfb_int2color(pixel, &img->pl);
         } else {
         } else {
             pixel = ((unsigned char *)ptr)[x0];
             pixel = ((unsigned char *)ptr)[x0];
-            col = nk_rawfb_int2color(pixel, img->pl);
+            col = nk_rawfb_int2color(pixel, &img->pl);
         }
         }
     } return col;
     } return col;
 }
 }
@@ -235,7 +235,7 @@ nk_rawfb_scissor(struct rawfb_context *rawfb,
 static void
 static void
 nk_rawfb_stroke_line(const struct rawfb_context *rawfb,
 nk_rawfb_stroke_line(const struct rawfb_context *rawfb,
     short x0, short y0, short x1, short y1,
     short x0, short y0, short x1, short y1,
-    const unsigned int line_thickness, const struct nk_color col)
+    const unsigned int line_thickness, const rawfb_color col)
 {
 {
     short tmp;
     short tmp;
     int dy, dx, stepx, stepy;
     int dy, dx, stepx, stepy;
@@ -304,7 +304,7 @@ nk_rawfb_stroke_line(const struct rawfb_context *rawfb,
 
 
 static void
 static void
 nk_rawfb_fill_polygon(const struct rawfb_context *rawfb,
 nk_rawfb_fill_polygon(const struct rawfb_context *rawfb,
-    const struct nk_vec2i *pnts, int count, const struct nk_color col)
+    const struct nk_vec2i *pnts, int count, const rawfb_color col)
 {
 {
     int i = 0;
     int i = 0;
     #define MAX_POINTS 64
     #define MAX_POINTS 64
@@ -368,7 +368,7 @@ nk_rawfb_fill_polygon(const struct rawfb_context *rawfb,
 static void
 static void
 nk_rawfb_stroke_arc(const struct rawfb_context *rawfb,
 nk_rawfb_stroke_arc(const struct rawfb_context *rawfb,
     short x0, short y0, short w, short h, const short s,
     short x0, short y0, short w, short h, const short s,
-    const short line_thickness, const struct nk_color col)
+    const short line_thickness, const rawfb_color col)
 {
 {
     /* Bresenham's ellipses - modified to draw one quarter */
     /* Bresenham's ellipses - modified to draw one quarter */
     const int a2 = (w * w) / 4;
     const int a2 = (w * w) / 4;
@@ -421,7 +421,7 @@ nk_rawfb_stroke_arc(const struct rawfb_context *rawfb,
 
 
 static void
 static void
 nk_rawfb_fill_arc(const struct rawfb_context *rawfb, short x0, short y0,
 nk_rawfb_fill_arc(const struct rawfb_context *rawfb, short x0, short y0,
-    short w, short h, const short s, const struct nk_color col)
+    short w, short h, const short s, const rawfb_color col)
 {
 {
     /* Bresenham's ellipses - modified to fill one quarter */
     /* Bresenham's ellipses - modified to fill one quarter */
     const int a2 = (w * w) / 4;
     const int a2 = (w * w) / 4;
@@ -486,7 +486,7 @@ nk_rawfb_fill_arc(const struct rawfb_context *rawfb, short x0, short y0,
 static void
 static void
 nk_rawfb_stroke_rect(const struct rawfb_context *rawfb,
 nk_rawfb_stroke_rect(const struct rawfb_context *rawfb,
     const short x, const short y, const short w, const short h,
     const short x, const short y, const short w, const short h,
-    const short r, const short line_thickness, const struct nk_color col)
+    const short r, const short line_thickness, const rawfb_color col)
 {
 {
     if (r == 0) {
     if (r == 0) {
         nk_rawfb_stroke_line(rawfb, x, y, x + w, y, line_thickness, col);
         nk_rawfb_stroke_line(rawfb, x, y, x + w, y, line_thickness, col);
@@ -518,7 +518,7 @@ nk_rawfb_stroke_rect(const struct rawfb_context *rawfb,
 static void
 static void
 nk_rawfb_fill_rect(const struct rawfb_context *rawfb,
 nk_rawfb_fill_rect(const struct rawfb_context *rawfb,
     const short x, const short y, const short w, const short h,
     const short x, const short y, const short w, const short h,
-    const short r, const struct nk_color col)
+    const short r, const rawfb_color col)
 {
 {
     int i;
     int i;
     if (r == 0) {
     if (r == 0) {
@@ -650,7 +650,7 @@ nk_rawfb_draw_rect_multi_color(const struct rawfb_context *rawfb,
 static void
 static void
 nk_rawfb_fill_triangle(const struct rawfb_context *rawfb,
 nk_rawfb_fill_triangle(const struct rawfb_context *rawfb,
     const short x0, const short y0, const short x1, const short y1,
     const short x0, const short y0, const short x1, const short y1,
-    const short x2, const short y2, const struct nk_color col)
+    const short x2, const short y2, const rawfb_color col)
 {
 {
     struct nk_vec2i pnts[3];
     struct nk_vec2i pnts[3];
     pnts[0].x = x0;
     pnts[0].x = x0;
@@ -666,7 +666,7 @@ static void
 nk_rawfb_stroke_triangle(const struct rawfb_context *rawfb,
 nk_rawfb_stroke_triangle(const struct rawfb_context *rawfb,
     const short x0, const short y0, const short x1, const short y1,
     const short x0, const short y0, const short x1, const short y1,
     const short x2, const short y2, const unsigned short line_thickness,
     const short x2, const short y2, const unsigned short line_thickness,
-    const struct nk_color col)
+    const rawfb_color col)
 {
 {
     nk_rawfb_stroke_line(rawfb, x0, y0, x1, y1, line_thickness, col);
     nk_rawfb_stroke_line(rawfb, x0, y0, x1, y1, line_thickness, col);
     nk_rawfb_stroke_line(rawfb, x1, y1, x2, y2, line_thickness, col);
     nk_rawfb_stroke_line(rawfb, x1, y1, x2, y2, line_thickness, col);
@@ -676,7 +676,7 @@ nk_rawfb_stroke_triangle(const struct rawfb_context *rawfb,
 static void
 static void
 nk_rawfb_stroke_polygon(const struct rawfb_context *rawfb,
 nk_rawfb_stroke_polygon(const struct rawfb_context *rawfb,
     const struct nk_vec2i *pnts, const int count,
     const struct nk_vec2i *pnts, const int count,
-    const unsigned short line_thickness, const struct nk_color col)
+    const unsigned short line_thickness, const rawfb_color col)
 {
 {
     int i;
     int i;
     for (i = 1; i < count; ++i)
     for (i = 1; i < count; ++i)
@@ -689,7 +689,7 @@ nk_rawfb_stroke_polygon(const struct rawfb_context *rawfb,
 static void
 static void
 nk_rawfb_stroke_polyline(const struct rawfb_context *rawfb,
 nk_rawfb_stroke_polyline(const struct rawfb_context *rawfb,
     const struct nk_vec2i *pnts, const int count,
     const struct nk_vec2i *pnts, const int count,
-    const unsigned short line_thickness, const struct nk_color col)
+    const unsigned short line_thickness, const rawfb_color col)
 {
 {
     int i;
     int i;
     for (i = 0; i < count-1; ++i)
     for (i = 0; i < count-1; ++i)
@@ -699,7 +699,7 @@ nk_rawfb_stroke_polyline(const struct rawfb_context *rawfb,
 
 
 static void
 static void
 nk_rawfb_fill_circle(const struct rawfb_context *rawfb,
 nk_rawfb_fill_circle(const struct rawfb_context *rawfb,
-    short x0, short y0, short w, short h, const struct nk_color col)
+    short x0, short y0, short w, short h, const rawfb_color col)
 {
 {
     /* Bresenham's ellipses */
     /* Bresenham's ellipses */
     const int a2 = (w * w) / 4;
     const int a2 = (w * w) / 4;
@@ -736,7 +736,7 @@ nk_rawfb_fill_circle(const struct rawfb_context *rawfb,
 static void
 static void
 nk_rawfb_stroke_circle(const struct rawfb_context *rawfb,
 nk_rawfb_stroke_circle(const struct rawfb_context *rawfb,
     short x0, short y0, short w, short h, const short line_thickness,
     short x0, short y0, short w, short h, const short line_thickness,
-    const struct nk_color col)
+    const rawfb_color col)
 {
 {
     /* Bresenham's ellipses */
     /* Bresenham's ellipses */
     const int a2 = (w * w) / 4;
     const int a2 = (w * w) / 4;
@@ -781,7 +781,7 @@ nk_rawfb_stroke_curve(const struct rawfb_context *rawfb,
     const struct nk_vec2i p1, const struct nk_vec2i p2,
     const struct nk_vec2i p1, const struct nk_vec2i p2,
     const struct nk_vec2i p3, const struct nk_vec2i p4,
     const struct nk_vec2i p3, const struct nk_vec2i p4,
     const unsigned int num_segments, const unsigned short line_thickness,
     const unsigned int num_segments, const unsigned short line_thickness,
-    const struct nk_color col)
+    const rawfb_color col)
 {
 {
     unsigned int i_step, segments;
     unsigned int i_step, segments;
     float t_step;
     float t_step;
@@ -805,7 +805,7 @@ nk_rawfb_stroke_curve(const struct rawfb_context *rawfb,
 }
 }
 
 
 static void
 static void
-nk_rawfb_clear(const struct rawfb_context *rawfb, const struct nk_color col)
+nk_rawfb_clear(const struct rawfb_context *rawfb, const rawfb_color col)
 {
 {
     nk_rawfb_fill_rect(rawfb, 0, 0, rawfb->fb.w, rawfb->fb.h, 0, col);
     nk_rawfb_fill_rect(rawfb, 0, 0, rawfb->fb.w, rawfb->fb.h, 0, col);
 }
 }
@@ -1032,10 +1032,11 @@ nk_rawfb_render(const struct rawfb_context *rawfb,
                 const struct nk_color clear,
                 const struct nk_color clear,
                 const unsigned char enable_clear)
                 const unsigned char enable_clear)
 {
 {
+    const struct rawfb_pl *pl = &rawfb->fb.pl;
     const struct nk_command *cmd;
     const struct nk_command *cmd;
 
 
     if (enable_clear)
     if (enable_clear)
-        nk_rawfb_clear(rawfb, clear);
+        nk_rawfb_clear(rawfb, nk_rawfb_color2int(clear, pl));
 
 
     nk_foreach(cmd, (struct nk_context*)&rawfb->ctx) {
     nk_foreach(cmd, (struct nk_context*)&rawfb->ctx) {
         switch (cmd->type) {
         switch (cmd->type) {
@@ -1047,47 +1048,51 @@ nk_rawfb_render(const struct rawfb_context *rawfb,
         case NK_COMMAND_LINE: {
         case NK_COMMAND_LINE: {
             const struct nk_command_line *l = (const struct nk_command_line *)cmd;
             const struct nk_command_line *l = (const struct nk_command_line *)cmd;
             nk_rawfb_stroke_line(rawfb, l->begin.x, l->begin.y, l->end.x,
             nk_rawfb_stroke_line(rawfb, l->begin.x, l->begin.y, l->end.x,
-                l->end.y, l->line_thickness, l->color);
+                l->end.y, l->line_thickness, nk_rawfb_color2int(l->color, pl));
         } break;
         } break;
         case NK_COMMAND_RECT: {
         case NK_COMMAND_RECT: {
             const struct nk_command_rect *r = (const struct nk_command_rect *)cmd;
             const struct nk_command_rect *r = (const struct nk_command_rect *)cmd;
             nk_rawfb_stroke_rect(rawfb, r->x, r->y, r->w, r->h,
             nk_rawfb_stroke_rect(rawfb, r->x, r->y, r->w, r->h,
-                (unsigned short)r->rounding, r->line_thickness, r->color);
+                (unsigned short)r->rounding, r->line_thickness,
+                nk_rawfb_color2int(r->color, pl));
         } break;
         } break;
         case NK_COMMAND_RECT_FILLED: {
         case NK_COMMAND_RECT_FILLED: {
             const struct nk_command_rect_filled *r = (const struct nk_command_rect_filled *)cmd;
             const struct nk_command_rect_filled *r = (const struct nk_command_rect_filled *)cmd;
             nk_rawfb_fill_rect(rawfb, r->x, r->y, r->w, r->h,
             nk_rawfb_fill_rect(rawfb, r->x, r->y, r->w, r->h,
-                (unsigned short)r->rounding, r->color);
+                (unsigned short)r->rounding, nk_rawfb_color2int(r->color, pl));
         } break;
         } break;
         case NK_COMMAND_CIRCLE: {
         case NK_COMMAND_CIRCLE: {
             const struct nk_command_circle *c = (const struct nk_command_circle *)cmd;
             const struct nk_command_circle *c = (const struct nk_command_circle *)cmd;
-            nk_rawfb_stroke_circle(rawfb, c->x, c->y, c->w, c->h, c->line_thickness, c->color);
+            nk_rawfb_stroke_circle(rawfb, c->x, c->y, c->w, c->h, c->line_thickness,
+                                   nk_rawfb_color2int(c->color, pl));
         } break;
         } break;
         case NK_COMMAND_CIRCLE_FILLED: {
         case NK_COMMAND_CIRCLE_FILLED: {
             const struct nk_command_circle_filled *c = (const struct nk_command_circle_filled *)cmd;
             const struct nk_command_circle_filled *c = (const struct nk_command_circle_filled *)cmd;
-            nk_rawfb_fill_circle(rawfb, c->x, c->y, c->w, c->h, c->color);
+            nk_rawfb_fill_circle(rawfb, c->x, c->y, c->w, c->h,
+                                 nk_rawfb_color2int(c->color, pl));
         } break;
         } break;
         case NK_COMMAND_TRIANGLE: {
         case NK_COMMAND_TRIANGLE: {
             const struct nk_command_triangle*t = (const struct nk_command_triangle*)cmd;
             const struct nk_command_triangle*t = (const struct nk_command_triangle*)cmd;
             nk_rawfb_stroke_triangle(rawfb, t->a.x, t->a.y, t->b.x, t->b.y,
             nk_rawfb_stroke_triangle(rawfb, t->a.x, t->a.y, t->b.x, t->b.y,
-                t->c.x, t->c.y, t->line_thickness, t->color);
+                t->c.x, t->c.y, t->line_thickness, nk_rawfb_color2int(t->color, pl));
         } break;
         } break;
         case NK_COMMAND_TRIANGLE_FILLED: {
         case NK_COMMAND_TRIANGLE_FILLED: {
             const struct nk_command_triangle_filled *t = (const struct nk_command_triangle_filled *)cmd;
             const struct nk_command_triangle_filled *t = (const struct nk_command_triangle_filled *)cmd;
             nk_rawfb_fill_triangle(rawfb, t->a.x, t->a.y, t->b.x, t->b.y,
             nk_rawfb_fill_triangle(rawfb, t->a.x, t->a.y, t->b.x, t->b.y,
-                t->c.x, t->c.y, t->color);
+                t->c.x, t->c.y, nk_rawfb_color2int(t->color, pl));
         } break;
         } break;
         case NK_COMMAND_POLYGON: {
         case NK_COMMAND_POLYGON: {
             const struct nk_command_polygon *p =(const struct nk_command_polygon*)cmd;
             const struct nk_command_polygon *p =(const struct nk_command_polygon*)cmd;
-            nk_rawfb_stroke_polygon(rawfb, p->points, p->point_count, p->line_thickness,p->color);
+            nk_rawfb_stroke_polygon(rawfb, p->points, p->point_count, p->line_thickness,
+                                    nk_rawfb_color2int(p->color, pl));
         } break;
         } break;
         case NK_COMMAND_POLYGON_FILLED: {
         case NK_COMMAND_POLYGON_FILLED: {
             const struct nk_command_polygon_filled *p = (const struct nk_command_polygon_filled *)cmd;
             const struct nk_command_polygon_filled *p = (const struct nk_command_polygon_filled *)cmd;
-            nk_rawfb_fill_polygon(rawfb, p->points, p->point_count, p->color);
+            nk_rawfb_fill_polygon(rawfb, p->points, p->point_count, nk_rawfb_color2int(p->color, pl));
         } break;
         } break;
         case NK_COMMAND_POLYLINE: {
         case NK_COMMAND_POLYLINE: {
             const struct nk_command_polyline *p = (const struct nk_command_polyline *)cmd;
             const struct nk_command_polyline *p = (const struct nk_command_polyline *)cmd;
-            nk_rawfb_stroke_polyline(rawfb, p->points, p->point_count, p->line_thickness, p->color);
+            nk_rawfb_stroke_polyline(rawfb, p->points, p->point_count, p->line_thickness, nk_rawfb_color2int(p->color, pl));
         } break;
         } break;
         case NK_COMMAND_TEXT: {
         case NK_COMMAND_TEXT: {
             const struct nk_command_text *t = (const struct nk_command_text*)cmd;
             const struct nk_command_text *t = (const struct nk_command_text*)cmd;
@@ -1097,7 +1102,7 @@ nk_rawfb_render(const struct rawfb_context *rawfb,
         case NK_COMMAND_CURVE: {
         case NK_COMMAND_CURVE: {
             const struct nk_command_curve *q = (const struct nk_command_curve *)cmd;
             const struct nk_command_curve *q = (const struct nk_command_curve *)cmd;
             nk_rawfb_stroke_curve(rawfb, q->begin, q->ctrl[0], q->ctrl[1],
             nk_rawfb_stroke_curve(rawfb, q->begin, q->ctrl[0], q->ctrl[1],
-                q->end, 22, q->line_thickness, q->color);
+                q->end, 22, q->line_thickness, nk_rawfb_color2int(q->color, pl));
         } break;
         } break;
         case NK_COMMAND_RECT_MULTI_COLOR: {
         case NK_COMMAND_RECT_MULTI_COLOR: {
             const struct nk_command_rect_multi_color *q = (const struct nk_command_rect_multi_color *)cmd;
             const struct nk_command_rect_multi_color *q = (const struct nk_command_rect_multi_color *)cmd;