[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freetype2-demos] master b68f156: [graph] Untested legacy 15/16-bit colo
From: |
Alexei Podtelezhnikov |
Subject: |
[freetype2-demos] master b68f156: [graph] Untested legacy 15/16-bit color fixes. |
Date: |
Wed, 19 Oct 2016 02:51:36 +0000 (UTC) |
branch: master
commit b68f156f15a925ea7f2a89a7fbd8d2eb1085927b
Author: Alexei Podtelezhnikov <address@hidden>
Commit: Alexei Podtelezhnikov <address@hidden>
[graph] Untested legacy 15/16-bit color fixes.
Our tools do not use the legacy 15/16-bit color modes. This is mostly
for the sake of correctness. We might also remove the code.
* graph/grblit.c (blit_gray{8,}_to_{555,565}): Updated.
* graph/x11/grx11.c (gr_x11_format_{bgr565,rgb555,bgr555}): Updated.
---
ChangeLog | 10 ++++++++
graph/grblit.c | 67 +++++++++++++++++++++--------------------------------
graph/x11/grx11.c | 6 ++---
3 files changed, 39 insertions(+), 44 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index a7e7d25..aacd1d1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2016-10-18 Alexei Podtelezhnikov <address@hidden>
+
+ [graph] Untested legacy 15/16-bit color fixes.
+
+ Our tools do not use the legacy 15/16-bit color modes. This is mostly
+ for the sake of correctness. We might also remove the code.
+
+ * graph/grblit.c (blit_gray{8,}_to_{555,565}): Updated.
+ * graph/x11/grx11.c (gr_x11_format_{bgr565,rgb555,bgr555}): Updated.
+
2016-10-13 Alexei Podtelezhnikov <address@hidden>
* graph/grblit.c (blit_lcd28_to_24): Typo.
diff --git a/graph/grblit.c b/graph/grblit.c
index a69e0cb..8c12004 100644
--- a/graph/grblit.c
+++ b/graph/grblit.c
@@ -865,19 +865,15 @@
grColor color )
{
int y;
- int sr = (color.chroma[0] << 8) & 0x7C00;
+ int sr = (color.chroma[0] << 7) & 0x7C00;
int sg = (color.chroma[1] << 2) & 0x03E0;
- int sb = (color.chroma[2] ) & 0x001F;
+ int sb = (color.chroma[2] >> 3) & 0x001F;
unsigned char* read;
unsigned char* write;
- long color2;
read = blit->read + blit->xread;
write = blit->write + 2*blit->xwrite;
- color2 = color.value;
- extract565( color2, color );
-
y = blit->height;
do
{
@@ -895,9 +891,7 @@
unsigned short* pixel = (unsigned short*)_write;
if (val >= 254 )
- {
- pixel[0] = (unsigned short)color2;
- }
+ *pixel = (unsigned short)( sr | sg | sb );
else if ( val >= 2 )
{
/* compose gray value */
@@ -906,17 +900,14 @@
int dg = pix & 0x03E0;
int db = pix & 0x001F;
- dr = pix & 0x7C00;
dr += ((sr-dr)*val) >> 8;
- dr &= 0xF800;
+ dr &= 0x7C00;
- dg = pix & 0x03E0;
dg += ((sg-dg)*val) >> 8;
- dg &= 0x7E0;
+ dg &= 0x03E0;
- db = pix & 0x001F;
db += ((sb-db)*val) >> 8;
- db += 0x001F;
+ db &= 0x001F;
*pixel = (unsigned short)( dr | dg | db );
}
@@ -943,14 +934,14 @@
int y;
unsigned char* read;
unsigned char* write;
- long color2;
read = blit->read + blit->xread;
write = blit->write + 2*blit->xwrite;
- /* convert color to R:G:B triplet */
- color2 = color.value;
- extract555( color2, color );
+ /* scale down R:G:B triplet */
+ color.chroma[0] >>= 3;
+ color.chroma[1] >>= 3;
+ color.chroma[2] >>= 3;
y = blit->height;
do
@@ -969,7 +960,7 @@
unsigned short* pixel = (unsigned short*)_write;
if (val == max)
- pixel[0] = (unsigned short)color2;
+ *pixel = (unsigned short)(inject555( color ));
else
{
/* compose gray value */
@@ -979,7 +970,7 @@
extract555( pix16, pix );
compose_pixel( pix, color, val, max );
- *pixel = (unsigned short)(inject555(pix));
+ *pixel = (unsigned short)(inject555( pix ));
}
}
_write += 2;
@@ -1008,18 +999,14 @@
{
int y;
int sr = (color.chroma[0] << 8) & 0xF800;
- int sg = (color.chroma[1] << 2) & 0x07E0;
- int sb = (color.chroma[2] ) & 0x001F;
+ int sg = (color.chroma[1] << 3) & 0x07E0;
+ int sb = (color.chroma[2] >> 3) & 0x001F;
unsigned char* read;
unsigned char* write;
- long color2;
read = blit->read + blit->xread;
write = blit->write + 2*blit->xwrite;
- color2 = color.value;
- extract565( color2, color );
-
y = blit->height;
do
{
@@ -1037,7 +1024,7 @@
unsigned short* pixel = (unsigned short*)_write;
if (val >= 254 )
- pixel[0] = (unsigned short)color2;
+ *pixel = (unsigned short)( sr | sg | sb );
else if ( val >= 2 )
{
/* compose gray value */
@@ -1046,17 +1033,14 @@
int dg = pix & 0x07E0;
int db = pix & 0x001F;
- dr = pix & 0xF800;
dr += ((sr-dr)*val) >> 8;
dr &= 0xF800;
- dg = pix & 0x07E0;
dg += ((sg-dg)*val) >> 8;
- dg &= 0x7E0;
+ dg &= 0x07E0;
- db = pix & 0x001F;
db += ((sb-db)*val) >> 8;
- db += 0x001F;
+ db &= 0x001F;
*pixel = (unsigned short)( dr | dg | db );
}
@@ -1082,13 +1066,14 @@
int y;
unsigned char* read;
unsigned char* write;
- long color2;
read = blit->read + blit->xread;
write = blit->write + 2*blit->xwrite;
- color2 = color.value;
- extract565( color2, color );
+ /* scale down R:G:B triplet */
+ color.chroma[0] >>= 3;
+ color.chroma[1] >>= 2;
+ color.chroma[2] >>= 3;
y = blit->height;
do
@@ -1107,7 +1092,7 @@
unsigned short* pixel = (unsigned short*)_write;
if (val == max)
- pixel[0] = (unsigned short)color2;
+ *pixel = (unsigned short)inject565( color );
else
{
/* compose gray value */
@@ -1867,7 +1852,7 @@
static double gblender_gamma = -100.0;
if ( glyph->grays != 256 )
- goto DefaultBlit;
+ goto LegacyBlit;
switch ( glyph->mode )
{
@@ -1879,7 +1864,7 @@
case gr_pixel_mode_bgra: src_format = GBLENDER_SOURCE_BGRA; break;
default:
- goto DefaultBlit;
+ goto LegacyBlit;
}
width = glyph->width;
@@ -1899,7 +1884,7 @@
case gr_pixel_mode_rgb24: dst_format = GBLENDER_TARGET_RGB24; break;
case gr_pixel_mode_rgb565: dst_format = GBLENDER_TARGET_RGB565; break;
default:
- goto DefaultBlit;
+ goto LegacyBlit;
}
/* initialize blender when needed, i.e. when gamma changes
@@ -1935,7 +1920,7 @@
return 1;
}
- DefaultBlit:
+ LegacyBlit: /* no gamma correction, no caching */
/* set up blitter and compute clipping. Return immediately if needed */
blit.source = *glyph;
diff --git a/graph/x11/grx11.c b/graph/x11/grx11.c
index b757a15..611a5cd 100644
--- a/graph/x11/grx11.c
+++ b/graph/x11/grx11.c
@@ -362,7 +362,7 @@ typedef unsigned long uint32;
static const grX11Format gr_x11_format_bgr565 =
{
- 16, 16, 0x001F, 0x7E00, 0xF800U,
+ 16, 16, 0x001F, 0x07E0, 0xF800U,
gr_x11_convert_rgb_to_bgr565,
gr_x11_convert_gray_to_rgb565 /* the same for bgr565! */
};
@@ -442,7 +442,7 @@ typedef unsigned long uint32;
static const grX11Format gr_x11_format_rgb555 =
{
- 15, 16, 0x7C00, 0x3E00, 0x001F,
+ 15, 16, 0x7C00, 0x03E0, 0x001F,
gr_x11_convert_rgb_to_rgb555,
gr_x11_convert_gray_to_rgb555
};
@@ -491,7 +491,7 @@ typedef unsigned long uint32;
static const grX11Format gr_x11_format_bgr555 =
{
- 15, 16, 0x1F00, 0x3E00, 0x7C00,
+ 15, 16, 0x001F, 0x03E0, 0x7C00,
gr_x11_convert_rgb_to_bgr555,
gr_x11_convert_gray_to_rgb555 /* the same for bgr555! */
};
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2-demos] master b68f156: [graph] Untested legacy 15/16-bit color fixes.,
Alexei Podtelezhnikov <=