Please find attached a patch that adds two pixel formats:
XRGB4444
XRGB1555
Both of these modes are very useful in embedded systems and are vital when
you have hardware support for Alpha.
Using this format allows Alpha to be ignored.
It has been tested and I believe it works in all cases however.
I would welcome any feedback on this patch (improvements/bugs/suggestions)
Patch below:
--- DirectFB-1.0.0/include/directfb.h
+++ DirectFB-1.0.0.new/include/directfb.h
@@ -1008,10 +1008,16 @@
/* 2 bit LUT (1 byte/ 4 pixel, 2 bit color and alpha lookup from
palette) */
DSPF_LUT2 = DFB_SURFACE_PIXELFORMAT( 25, 2, 0, 1, 2, 0, 3, 0, 0,
1, 0 ),
+ /* 16 bit XRGB (2 byte, nothing @12, red [EMAIL PROTECTED], green
[EMAIL PROTECTED], blue [EMAIL PROTECTED]) */
+ DSPF_XRGB4444 = DFB_SURFACE_PIXELFORMAT( 26, 12, 0, 0, 0, 2, 0, 0, 0,
0, 0 ),
+
+ /* 16 bit XRGB (2 byte, nothing @15, red [EMAIL PROTECTED], green [EMAIL
PROTECTED], blue [EMAIL PROTECTED])
*/
+ DSPF_XRGB1555 = DFB_SURFACE_PIXELFORMAT( 27, 15, 0, 0, 0, 2, 0, 0, 0,
0, 0 )
+
} DFBSurfacePixelFormat;
/* Number of pixelformats defined */
-#define DFB_NUM_PIXELFORMATS 26
+#define DFB_NUM_PIXELFORMATS 28
/* These macros extract information about the pixel format. */
#define DFB_PIXELFORMAT_INDEX(fmt) (((fmt) & 0x0000007F) )
--- DirectFB-1.0.0/systems/fbdev/fbdev.c
+++ DirectFB-1.0.0.new/systems/fbdev/fbdev.c
@@ -1520,22 +1520,28 @@
if (fbdev_compatible_format( var, 0, 3, 3, 2, 0, 5, 2, 0
))*/
return DSPF_RGB332;
-
case 15:
- if (dfb_fbdev_compatible_format( var, 0, 5, 5, 5, 0, 10, 5,
0 ) |
- dfb_fbdev_compatible_format( var, 1, 5, 5, 5,15, 10, 5,
0 ) )
- return DSPF_ARGB1555;
+ if (dfb_fbdev_compatible_format( var, 0, 5, 5, 5, 0, 10, 5,
0 ))
+ return DSPF_XRGB1555;
+
+ if(dfb_fbdev_compatible_format( var, 1, 5, 5, 5, 15, 10, 5,
0 ))
+ return DSPF_ARGB1555;
break;
- case 16:
- if (dfb_fbdev_compatible_format( var, 0, 5, 5, 5, 0, 10, 5,
0 ) |
- dfb_fbdev_compatible_format( var, 1, 5, 5, 5,15, 10, 5,
0 ) )
- return DSPF_ARGB1555;
-
- if (dfb_fbdev_compatible_format( var, 0, 4, 4, 4, 0, 8, 4,
0 ) |
- dfb_fbdev_compatible_format( var, 4, 4, 4, 4, 12, 8, 4,
0 ) )
+ case 16:
+
+ if (dfb_fbdev_compatible_format( var, 0, 5, 5, 5, 0, 10, 5,
0 ))
+ return DSPF_XRGB1555;
+
+ if(dfb_fbdev_compatible_format( var, 1, 5, 5, 5, 15, 10, 5,
0 ))
+ return DSPF_ARGB1555;
+
+ if (dfb_fbdev_compatible_format( var, 4, 4, 4, 4, 12, 8, 4,
0 ))
return DSPF_ARGB4444;
+
+ if (dfb_fbdev_compatible_format( var, 0, 4, 4, 4, 0, 8, 4, 0
))
+ return DSPF_XRGB4444;
if (dfb_fbdev_compatible_format( var, 0, 5, 6, 5, 0, 11, 5,
0 ))
return DSPF_RGB16;
@@ -1694,6 +1700,15 @@
var.blue.offset = 0;
break;
+ case DSPF_XRGB1555:
+ var.red.length = 5;
+ var.green.length = 5;
+ var.blue.length = 5;
+ var.red.offset = 10;
+ var.green.offset = 5;
+ var.blue.offset = 0;
+ break;
+
case DSPF_ARGB4444:
var.transp.length = 4;
var.red.length = 4;
@@ -1704,6 +1719,24 @@
var.green.offset = 4;
var.blue.offset = 0;
break;
+
+ case DSPF_XRGB4444:
+ var.red.length = 4;
+ var.green.length = 4;
+ var.blue.length = 4;
+ var.red.offset = 8;
+ var.green.offset = 4;
+ var.blue.offset = 0;
+ break;
+
+ case DSPF_RGB32:
+ var.red.length = 8;
+ var.green.length = 8;
+ var.blue.length = 8;
+ var.red.offset = 16;
+ var.green.offset = 8;
+ var.blue.offset = 0;
+ break;
case DSPF_RGB16:
var.red.length = 5;
@@ -1728,7 +1761,6 @@
case DSPF_LUT8:
case DSPF_RGB24:
- case DSPF_RGB32:
case DSPF_RGB332:
break;
@@ -2160,10 +2192,13 @@
switch (format) {
case DSPF_ARGB1555:
+ case DSPF_XRGB1555:
red_size = 32;
green_size = 32;
blue_size = 32;
break;
+ case DSPF_ARGB4444:
+ case DSPF_XRGB4444:
case DSPF_RGB16:
red_size = 32;
green_size = 64;
Cheers
Dan Laird
http://www.nabble.com/file/7131/extra_pixel_formats.patch
extra_pixel_formats.patch
--
View this message in context:
http://www.nabble.com/Extra-Pixel-Format-Support-tf3394922.html#a9451247
Sent from the DirectFB Dev mailing list archive at Nabble.com.
_______________________________________________
directfb-dev mailing list
[email protected]
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev