//trunk/kernel/genarch/include/fb/visuals.h |
---|
37,8 → 37,10 |
typedef enum { |
VISUAL_INDIRECT_8, |
VISUAL_BGR_5_5_5, |
VISUAL_BGR_5_6_5, |
VISUAL_RGB_5_5_5_LE, |
VISUAL_RGB_5_5_5_BE, |
VISUAL_RGB_5_6_5_LE, |
VISUAL_RGB_5_6_5_BE, |
VISUAL_BGR_8_8_8, |
VISUAL_BGR_0_8_8_8, |
VISUAL_BGR_8_8_8_0, |
//trunk/kernel/genarch/src/fb/fb.c |
---|
145,21 → 145,31 |
((uint8_t *) dst)[2] = RED(rgb, 8); |
} |
static void bgr_555(void *dst, uint32_t rgb) |
static void rgb_555_be(void *dst, uint32_t rgb) |
{ |
uint8_t hi = (BLUE(rgb, 5) | (GREEN(rgb, 5) << 5)) & 0xff; |
uint8_t lo = (GREEN(rgb, 5) >> 3) | (RED(rgb, 5) << 2); |
*((uint16_t *) dst) = host2uint16_t_be((hi << 8) | lo); |
*((uint16_t *) dst) = host2uint16_t_be(RED(rgb, 5) << 10 | |
GREEN(rgb, 5) << 5 | BLUE(rgb, 5)); |
} |
static void bgr_565(void *dst, uint32_t rgb) |
static void rgb_555_le(void *dst, uint32_t rgb) |
{ |
uint8_t hi = (BLUE(rgb, 5) | (GREEN(rgb, 6) << 5)) & 0xff; |
uint8_t lo = (GREEN(rgb, 6) >> 3) | (RED(rgb, 5) << 3); |
*((uint16_t *) dst) = host2uint16_t_be((hi << 8) | lo); |
*((uint16_t *) dst) = host2uint16_t_le(RED(rgb, 5) << 10 | |
GREEN(rgb, 5) << 5 | BLUE(rgb, 5)); |
} |
static void rgb_565_be(void *dst, uint32_t rgb) |
{ |
*((uint16_t *) dst) = host2uint16_t_be(RED(rgb, 5) << 11 | |
GREEN(rgb, 6) << 5 | BLUE(rgb, 5)); |
} |
static void rgb_565_le(void *dst, uint32_t rgb) |
{ |
*((uint16_t *) dst) = host2uint16_t_le(RED(rgb, 5) << 11 | |
GREEN(rgb, 6) << 5 | BLUE(rgb, 5)); |
} |
/** BGR 3:2:3 |
* |
* Even though we try 3:2:3 color scheme here, an 8-bit framebuffer |
454,14 → 464,22 |
rgb_conv = bgr_323; |
pixelbytes = 1; |
break; |
case VISUAL_BGR_5_5_5: |
rgb_conv = bgr_555; |
case VISUAL_RGB_5_5_5_LE: |
rgb_conv = rgb_555_le; |
pixelbytes = 2; |
break; |
case VISUAL_BGR_5_6_5: |
rgb_conv = bgr_565; |
case VISUAL_RGB_5_5_5_BE: |
rgb_conv = rgb_555_be; |
pixelbytes = 2; |
break; |
case VISUAL_RGB_5_6_5_LE: |
rgb_conv = rgb_565_le; |
pixelbytes = 2; |
break; |
case VISUAL_RGB_5_6_5_BE: |
rgb_conv = rgb_565_be; |
pixelbytes = 2; |
break; |
case VISUAL_RGB_8_8_8: |
rgb_conv = rgb_888; |
pixelbytes = 3; |
//trunk/kernel/arch/sparc64/src/drivers/scr.c |
---|
133,7 → 133,7 |
break; |
case 16: |
fb_scanline = fb_linebytes * (fb_depth >> 3); |
visual = VISUAL_BGR_5_6_5; |
visual = VISUAL_RGB_5_6_5_BE; |
break; |
case 24: |
fb_scanline = fb_linebytes * 4; |
177,7 → 177,7 |
break; |
case 16: |
fb_scanline = fb_linebytes * (fb_depth >> 3); |
visual = VISUAL_BGR_5_6_5; |
visual = VISUAL_RGB_5_6_5_BE; |
break; |
case 24: |
fb_scanline = fb_linebytes * 4; |
//trunk/kernel/arch/ppc32/src/ppc32.c |
---|
92,7 → 92,7 |
visual = VISUAL_INDIRECT_8; |
break; |
case 16: |
visual = VISUAL_BGR_5_5_5; |
visual = VISUAL_RGB_5_5_5_BE; |
break; |
case 24: |
visual = VISUAL_BGR_8_8_8; |
//trunk/kernel/arch/ia32/src/drivers/vesa.c |
---|
85,9 → 85,9 |
if ((vesa_red_mask == 5) && (vesa_red_pos == 10) |
&& (vesa_green_mask == 5) && (vesa_green_pos == 5) |
&& (vesa_blue_mask == 5) && (vesa_blue_pos == 0)) |
visual = VISUAL_BGR_5_5_5; |
visual = VISUAL_RGB_5_5_5_LE; |
else |
visual = VISUAL_BGR_5_6_5; |
visual = VISUAL_RGB_5_6_5_LE; |
break; |
case 24: |
visual = VISUAL_BGR_8_8_8; |
//trunk/uspace/srv/fb/fb.c |
---|
289,28 → 289,38 |
bgr_888(dst, mask ? 0xffffff : 0); |
} |
static void bgr_555(void *dst, uint32_t rgb) |
static void rgb_555_be(void *dst, uint32_t rgb) |
{ |
uint8_t hi = (BLUE(rgb, 5) | (GREEN(rgb, 5) << 5)) & 0xff; |
uint8_t lo = (GREEN(rgb, 5) >> 3) | (RED(rgb, 5) << 2); |
*((uint16_t *) dst) = host2uint16_t_be((hi << 8) | lo); |
*((uint16_t *) dst) = host2uint16_t_be(RED(rgb, 5) << 10 | |
GREEN(rgb, 5) << 5 | BLUE(rgb, 5)); |
} |
static void mask_555(void *dst, bool mask) |
static void rgb_555_le(void *dst, uint32_t rgb) |
{ |
bgr_555(dst, mask ? 0xffffff : 0); |
*((uint16_t *) dst) = host2uint16_t_le(RED(rgb, 5) << 10 | |
GREEN(rgb, 5) << 5 | BLUE(rgb, 5)); |
} |
static void bgr_565(void *dst, uint32_t rgb) |
static void rgb_565_be(void *dst, uint32_t rgb) |
{ |
uint8_t hi = (BLUE(rgb, 5) | (GREEN(rgb, 6) << 5)) & 0xff; |
uint8_t lo = (GREEN(rgb, 6) >> 3) | (RED(rgb, 5) << 3); |
*((uint16_t *) dst) = host2uint16_t_be((hi << 8) | lo); |
*((uint16_t *) dst) = host2uint16_t_be(RED(rgb, 5) << 11 | |
GREEN(rgb, 6) << 5 | BLUE(rgb, 5)); |
} |
static void rgb_565_le(void *dst, uint32_t rgb) |
{ |
*((uint16_t *) dst) = host2uint16_t_le(RED(rgb, 5) << 11 | |
GREEN(rgb, 6) << 5 | BLUE(rgb, 5)); |
} |
static void mask_555(void *dst, bool mask) |
{ |
rgb_555_be(dst, mask ? 0xffffff : 0); |
} |
static void mask_565(void *dst, bool mask) |
{ |
bgr_565(dst, mask ? 0xffffff : 0); |
rgb_565_be(dst, mask ? 0xffffff : 0); |
} |
static void bgr_323(void *dst, uint32_t rgb) |
621,16 → 631,26 |
screen.mask_conv = mask_323; |
screen.pixelbytes = 1; |
break; |
case VISUAL_BGR_5_5_5: |
screen.rgb_conv = bgr_555; |
case VISUAL_RGB_5_5_5_LE: |
screen.rgb_conv = rgb_555_le; |
screen.mask_conv = mask_555; |
screen.pixelbytes = 2; |
break; |
case VISUAL_BGR_5_6_5: |
screen.rgb_conv = bgr_565; |
case VISUAL_RGB_5_5_5_BE: |
screen.rgb_conv = rgb_555_be; |
screen.mask_conv = mask_555; |
screen.pixelbytes = 2; |
break; |
case VISUAL_RGB_5_6_5_LE: |
screen.rgb_conv = rgb_565_le; |
screen.mask_conv = mask_565; |
screen.pixelbytes = 2; |
break; |
case VISUAL_RGB_5_6_5_BE: |
screen.rgb_conv = rgb_565_be; |
screen.mask_conv = mask_565; |
screen.pixelbytes = 2; |
break; |
case VISUAL_RGB_8_8_8: |
screen.rgb_conv = rgb_888; |
screen.mask_conv = mask_888; |