freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2-demos] master c361b5d: [graph] Add 15-bit mode to `gblblit'.


From: Alexei Podtelezhnikov
Subject: [freetype2-demos] master c361b5d: [graph] Add 15-bit mode to `gblblit'.
Date: Mon, 2 Nov 2020 13:48:34 -0500 (EST)

branch: master
commit c361b5db700c3f4b13e4be7014964f91650ec73d
Author: Alexei Podtelezhnikov <apodtele@gmail.com>
Commit: Alexei Podtelezhnikov <apodtele@gmail.com>

    [graph] Add 15-bit mode to `gblblit'.
    
    No target depths left for legacy `grblit' except mono, pal4, pal8.
    
    * graph/gblblit.[ch]: Set up rgb555 target mode (instead of bgr565).
---
 ChangeLog       |  8 ++++++++
 graph/gblblit.c | 48 ++++++++++++++++++++++++++++--------------------
 graph/gblblit.h |  2 +-
 3 files changed, 37 insertions(+), 21 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 6308a04..4a36d27 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2020-11-02  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+       [graph] Add 15-bit mode to `gblblit'.
+
+       No target depths left for legacy `grblit' except mono, pal4, pal8.
+
+       * graph/gblblit.[ch]: Set up rgb555 target mode (instead of bgr565).
+
 2020-10-28  Alexei Podtelezhnikov  <apodtele@gmail.com>
 
        * graph/x11/grx11.c (gr_x11_surface_done): Free the bitmap here...
diff --git a/graph/gblblit.c b/graph/gblblit.c
index 3f4c0e1..21d0e9a 100644
--- a/graph/gblblit.c
+++ b/graph/gblblit.c
@@ -44,18 +44,21 @@
 
 /* */
 
-#define  GRGB_TO_BGR565(r,g,b)    GRGB_TO_RGB565(b,g,r)
+#define  GRGB_TO_RGB555(r,g,b)   ((unsigned short)( (((r) << 7) & 0x7C00) |  \
+                                                    (((g) << 2) & 0x03E0) |  \
+                                                    (((b) >> 3) & 0x001F) ) )
+
 
-#define  GBGR565_TO_RGB24(p)   ( ( ((p) << 19) & 0xF80000 ) |             \
-                                 ( ((p) << 12) & 0x070000 ) |             \
-                                 ( ((p) <<  5) & 0x00FC00 ) |             \
-                                 ( ((p) >>  1) & 0x000300 ) |             \
-                                 ( ((p) >>  8) & 0x0000F8 ) |             \
-                                 ( ((p) >> 13) & 0x000007 ) )
+#define  GRGB555_TO_RGB24(p)   ( ( ((p) << 9) & 0xF80000 ) |             \
+                                 ( ((p) << 4) & 0x070000 ) |             \
+                                 ( ((p) << 6) & 0x00F800 ) |             \
+                                 ( ((p) << 1) & 0x000700 ) |             \
+                                 ( ((p) << 3) & 0x0000F8 ) |             \
+                                 ( ((p) >> 2) & 0x000007 ) )
 
-#define  GRGB24_TO_BGR565(p)   ( (unsigned short)( (((p) <<  8) & 0xF800 ) |  \
-                                                   (((p) >>  5) & 0x07E0 ) |  \
-                                                   (((p) >> 19) & 0x001F ) ) )
+#define  GRGB24_TO_RGB555(p)   ( (unsigned short)( (((p) >> 9) & 0x7C00 ) |  \
+                                                   (((p) >> 6) & 0x03E0 ) |  \
+                                                   (((p) >> 3) & 0x001F ) ) )
 
 /* */
 
@@ -147,32 +150,32 @@
 
 #include "gblany.h"
 
-/* Bgr565 blitting routines
+/* Rgb555 blitting routines
  */
-#define  GDST_TYPE               bgr565
+#define  GDST_TYPE               rgb555
 #define  GDST_INCR               2
 
 #define  GDST_READ(d,p)          p = (GBlenderPixel)*(unsigned short*)(d);  \
-                                 p = GBGR565_TO_RGB24(p)
+                                 p = GRGB555_TO_RGB24(p)
 
-#define  GDST_COPY_VAR           unsigned short  pix = GRGB_TO_BGR565(r,g,b);
-#define  GDST_COPY(d)            *(d) = (unsigned char)pix
+#define  GDST_COPY_VAR           unsigned short  pix = GRGB_TO_RGB555(r,g,b);
+#define  GDST_COPY(d)            *(unsigned short*)(d) = pix
 
 #define  GDST_STOREB(d,cells,a)                                   \
     {                                                             \
       GBlenderCell*  _g = (cells) + (a)*3;                        \
                                                                   \
-      *(unsigned short*)(d) = GRGB_TO_BGR565(_g[0],_g[1],_g[2]);  \
+      *(unsigned short*)(d) = GRGB_TO_RGB555(_g[0],_g[1],_g[2]);  \
     }
 
 #define  GDST_STOREP(d,cells,a)                         \
     {                                                   \
       GBlenderPixel  _pix = (cells)[(a)];               \
                                                         \
-      *(unsigned short*)(d) = GRGB24_TO_BGR565(_pix);   \
+      *(unsigned short*)(d) = GRGB24_TO_RGB555(_pix);   \
     }
 
-#define  GDST_STOREC(d,r,g,b)   *(unsigned short*)(d) = GRGB_TO_BGR565(r,g,b)
+#define  GDST_STOREC(d,r,g,b)   *(unsigned short*)(d) = GRGB_TO_RGB555(r,g,b)
 
 #include "gblany.h"
 
@@ -212,7 +215,7 @@ blit_funcs[GBLENDER_TARGET_MAX] =
   blit_funcs_rgb32,
   blit_funcs_rgb24,
   blit_funcs_rgb565,
-  blit_funcs_bgr565
+  blit_funcs_rgb555
 };
 
 
@@ -271,6 +274,7 @@ gblender_blit_init( GBlenderBlit           blit,
   case gr_pixel_mode_rgb32:  dst_format = GBLENDER_TARGET_RGB32; break;
   case gr_pixel_mode_rgb24:  dst_format = GBLENDER_TARGET_RGB24; break;
   case gr_pixel_mode_rgb565: dst_format = GBLENDER_TARGET_RGB565; break;
+  case gr_pixel_mode_rgb555: dst_format = GBLENDER_TARGET_RGB555; break;
   default:
     return -2;
   }
@@ -380,6 +384,11 @@ grSetTargetPenBrush( grBitmap*  target,
     surface->gray_spans = _gblender_spans_gray8;
     surface->gcolor     = GGRAY8_TO_RGB24( color.value );
     break;
+  case gr_pixel_mode_rgb555:
+    surface->origin    += x * 2;
+    surface->gray_spans = _gblender_spans_rgb555;
+    surface->gcolor     = GRGB555_TO_RGB24( color.value );
+    break;
   case gr_pixel_mode_rgb565:
     surface->origin    += x * 2;
     surface->gray_spans = _gblender_spans_rgb565;
@@ -398,7 +407,6 @@ grSetTargetPenBrush( grBitmap*  target,
     surface->gcolor     = color.value;
     break;
   default:
-    (void)_gblender_spans_bgr565;  /* unused */
     surface->origin     = NULL;
     surface->gray_spans = (grSpanFunc)NULL;
     surface->gcolor     = 0;
diff --git a/graph/gblblit.h b/graph/gblblit.h
index c3a99a3..de36708 100644
--- a/graph/gblblit.h
+++ b/graph/gblblit.h
@@ -29,7 +29,7 @@ typedef enum
   GBLENDER_TARGET_RGB32,
   GBLENDER_TARGET_RGB24,
   GBLENDER_TARGET_RGB565,
-  GBLENDER_TARGET_BGR565,
+  GBLENDER_TARGET_RGB555,
 
   GBLENDER_TARGET_MAX
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]