DirectFB - Home of the pragmatist


2005-12-31   Happy New Year!!!

Well, time goes by faster and faster and it seems 2005 is already over again...
I wish everyone a happy, healthy, successful and exciting new year and that all your wishes, resolutions and dreams come true!
One of my new year's resolutions is to make a 1.0.0 release :)


...and to write more documentation :-/


2005-12-21   Debian Graphical Installer

Debian's Graphical Installer based on GTK+-DirectFB is having a Work Session in Extremadura.


2005-10-24   Something with that number... 0.9.24 is out!

Some fixes made it worthwhile to release 0.9.24 just now.
2005-10-25: Tarball updated! One file for static builds was still missing.

All changes

  • Added missing source (header) files to their appropriate, mostly from voodoo.
  • Don't use fusion_reactor_free() too early in case of an error in init_devices(). Thanks to "Jakub Bogusz <>" for this and other patches.
  • IDirectFBVideoProvider::GetPos() returns DFB_EOF to notify end-of-playback. After stream has reached the end, the next call to PlayTo() restarts playback from the beginning. (only documentation updated, feature had been there already)
  • No need for <linux/wm97xx.h> and <linux/sisfb.h> anymore.
  • Build all graphics drivers without checking for FB_ACCEL_* in <linux/fb.h>, because we have a fallback for each of those ids.
  • Don't build cle266 by default as it's obsolete because of the unichrome driver.


2005-10-18   0.9.23 is out!   /o\

Finally, 0.9.23 has been released. It has a lot of improvements and fixes. Click on the news title for more information.


  • Added "Claudio Ciccani <>" to main authors, welcome number five and thanks for your appreciated work :-)


  • Added IDirectFBSurface::DisableAcceleration( DFBAccelerationMask mask ).
  • Added DSBLIT_SRC_PREMULTCOLOR which modulates the source color with the color alpha value only.
  • Replaced IDirectFB::GetCardCapabilities() by GetDeviceDescription() and DFBCardCapabilities by DFBGraphicsDeviceDescription which contains additional information like device and driver name, version etc.
  • Added more enums to the autogenerated directfb_strings.h.
  • Added errorcode DFB_EOF.
  • Added DSBLIT_XOR.
  • Added universal event class for custom usage with variable size. New structure DFBUniversalEvent has a 'clazz' and a 'size' member. The clazz is always DFEC_UNIVERSAL and the size is at least sizeof(DFBUniversalEvent). There are no other members, but any amount of additional data may follow according to the specified size. Best usage would be to derive from the struct.
  • Added new input event flag DIEF_REPEAT indicating a repeated key or button press.
  • Support fractional font sizes in DFBFontDescription.
  • Added IDirectFBDataBuffer::CreateVideoProvider().
  • Added IDirectFBDataBuffer::Finish(): used to notify a streaming databuffer that the end-of-file has been reached.

Runtime Options

  • Fixed pixelformat=NV21 option.
  • Added option 'busid' to specify the graphics card bus id (unused if sysfs support is enabled).

Build Options

  • Allow predefinition of FREETYPE_CFLAGS and FREETYPE_LIBS outside of configure.
  • New configure option "--with-sysroot=DIR" lets you prepend a path to the runtime library/module paths.

Graphics Core

  • Added support for system to video memory blits in (semi-)hardware.
  • Some 24bit big endian fixes, thanks to Mark Salter <>!
  • Added dfb_gfxcard_invalidate_state() which sets the state pointer to NULL and therefore forces a full SetState() before the next operation is executed.
  • If the destination has premultiplied alpha do real Porter/Duff SRC_OVER composition for glyphs.
  • Fixed build_clipped_rectangle_outlines() to handle special cases where width and/or height is/are one or two.
  • Take into consideration DSDRAW_DST_COLORKEY and DSDRAW_XOR when drawing strings.
  • Added RGB332 and LUT8 support to dfb_surface_dump().
  • Fixed artifacts produced by clipped triangles, thanks to Damian Kowalewski <>!

Layer & Screen Core

  • Fixed missing updates to the hardware state under some circumstances.
  • It's allowed to create and use windows in exclusive mode, showing the own windows only, of course.
  • Changed EnableCursor() to be allowed in exclusive mode, too.
  • Added dfb_screens_hook_primary() using it in some drivers instead of dfb_screen_register_primary().
  • During flip using blitting, wait for pending writes to the back buffer before issuing the blit command from back to front buffer to avoid lags caused by too much queued commands.

Windowing Core

  • Support windows with premultiplied alpha by checking if their surface has DSCAPS_PREMULTIPLIED.
  • Support premultiplied cursor shapes.
  • If during window creation the pixel format for windows with an alpha channel is unspecified, don't always take DSPF_ARGB, but the layer's format if it has alpha.

Software Rasterizer

  • Fixed inverted YV12 colors.
  • Changed Bop_a8_set_alphapixel_Aop_argb() to be a fast path for real SRC_OVER DrawString() that uses DSBLIT_SRC_PREMULTIPLY and DSBLIT_BLEND_ALPHACHANNEL with SrcBlend = ONE and DstBlend = INVSRCALPHA. Other formats will follow.
  • Fixed DSDRAW_SRC_PREMULTIPLY if used without blending.
  • Added optimization for drawing blended with Src = ONE, Dst = ZERO.
  • Improved Dacc_YCbCr_to_RGB_MMX.
  • Fixed A8 to A8 font rendering.
  • Added some functions optimized for 64bit architectures.
  • Added duff's device for 8 bit color keying.

Image Loading

  • Premultiply image data when loading into premultiplied alpha surfaces.
  • Limit number of weights to 64 in x and y direction for down scaling. Without this limitation down scaling to 1x1 or similar could take minutes on embedded platforms.
  • If JFIF or Exif header detection failed, try detecting by filename extension.
  • For PNGs with alpha don't always suggest DSPF_ARGB, but the primary layer format if it has alpha.

Font Loading

  • If the font format is ARGB, use premultiplied font surfaces.
  • Use "signed char" explicitly to fix kerning in FT2 loader on PPC, thanks to Uli <>!
  • Support fractional font sizes in FT2 loader.
  • Fixed segmentation fault when loading OpenType fonts with FT2 loader.


  • A lot of code is using D_DEBUG_AT, D_ASSERT, D_MAGIC_ASSERT etc. now.
  • Added D_FLAGS_ASSERT(flags,f) being D_ASSERT( D_FLAGS_ARE_IN(flags,f) ).
  • Protect against bogus siginfo_t pointer by checking if it's smaller than 0x100.
  • Some changes to support KallistiOS.
  • Enable X86 memcpy()s on AMD64.
  • Added a generic memcpy() for 64bit Architectures.
  • MMX and SSE support on AMD64.
  • Fixed a bug in direct_list_remove()! If the last item is removed while other items exist, the first item's "prev" pointer was not updated (pointing to the last element).
  • Added low level logging abstraction. Added runtime options "log-file = <name>" and "log-udp = <host>:<port>" for configuring the default log.
  • Added direct_thread_set_name() for setting the name of threads that haven't been created by direct_thread_create().
  • Added DirectStream, a wrapper for accessing files locally and through network (http, ftp and generic tcp).


  • Added fusion_object_get() that gets a pool and an object id and returns the appropriate object with a local reference added to it. If the object is not found DFB_IDNOTFOUND is returned, or any abnormal other error from locking or referencing.
  • Added FusionObjectID to replace plain int usage.
  • Fixed an evil dead lock that only occured by moving a window with one of my new mice, having superior precision generating lots of events, thanks for spotting this bug, Logitech :)
  • Fixed a rare crash in single application mode, thanks to Mark Adams <>!


  • Fixed multi application support, but it only works with root privileges so far.
  • Fixes for coexistence with intelfb and for color adjustments, thanks to Sylvain Meyer <>!


  • Implemented destination color keying for overlay.
  • Merged back multi app fixed from i830 driver.


  • Cleaned up register definitions and added all known register names.
  • Improved chip type detection.
  • Made LCD register access work on 3D Rage LT.
  • Big overlay code update including support for DLOP_DEINTERLACING.
  • Scaler/3D acceleration now works on older GT chips. Tested on Rage II+ and IIC.
  • ARGB4444 support for GT chips.
  • Other minor fixes.


  • Implemented DSBLIT_SRC_PREMULTCOLOR using the Color ALU. If it's already used for colorizing, simply modulate the color values with the alpha, otherwise overwrite them.


  • Rewrite of the driver, following the structure of other drivers, e.g. Matrox.
  • Overlay and blitting supports Deinterlacing.
  • WaitForSync no longer burns the CPU (but actually requires a 2.6 kernel).
  • Decide texture buffer size according to available video memory.
  • StretchBlit() on A8,LUT8,RGB332 (>= NV20).
  • FillRectangle(),DrawRectangle(),FillTriangle(),DrawLine(),Blit() on LUT8,RGB332 and A8.
  • StretchBlit(),TextureTriangles(),[DrawString()],Alphablend and Colorize from A8 (>= NV10)
  • .
  • Alphachannel blend for ARGB1555.
  • Added support for system to video memory blits.
  • Improved TextureTriangles() performance.
  • NV30 supports StretchBlit(), blit with format conversion, alphablend and colorize.
  • Fixed NV30 initialization.
  • Made the driver work with the new nvidiafb framebuffer driver.
  • Made deinterlacing work properly with TextureTriangles().


  • New driver for ATI Radeon R200 based cards by Claudio Ciccani <>!
  • Accelerates FillRectangle,FillTriangle,DrawRectangle,DrawLine, Blit,StretchBlit,TextureTriangles.
  • Supported Drawing Flags: Blend, Xor.
  • Supported Blitting Flags: Alphablend, Coloralpha, Colorize, SrcPremultColor, SrcColorKey, Deinterlace.
  • Supported Formats: A8, RGB332, RGB16, RGB32, ARGB, ARGB1555, ARGB2554, ARGB4444, AiRGB, LUT8, ALUT44, YUY2, UYVY, YV12, I420.
  • Overlay supports YUY2, UYVY, YV12, I420, ARGB1555, RGB16, RGB32 and ARGB, color adjustments, DLOP_DEINTERLACE, DLOP_DST_COLORKEY and DLOP_OPACITY.

SiS 315

  • Compatibility stuff for newer fb driver versions.


  • Added missing flag DLCAPS_LEVEL, thanks to Stefan Lucke <>!

Linux Input

  • Fixed AltGr.
  • Better touchscreen/smartpad detection, thanks to Stefan Lucke <>!
  • Don't abort if checking for LEDs fails.

MuTouch Input

  • Improved packet reading loop, thanks to Ivan Daniluk <>!

PS/2 Mouse Input

  • Added GPM support. The mouse-protocol option specifies the protocol for the mice or the repeater (supported values: PS/2 and IMPS/2).

FBDev System

  • When restoring the video mode during shutdown, set xoffset and yoffset to 0.
  • Keep the original display offset if no mode has been set, e.g. just running "dfbinfo".
  • Added ARGB4444 support.

SDL System

  • Hide the SDL cursor so DirectFB one shows.

VNC Server System

  • Preliminary system module using libvncserver.

X11 System

  • Preliminary native X11 support, thanks to Martin Luetken <>!

Unique WM

  • Started work on the decoration framework, still not usable.


  • Show 'premultiplied' surface capability.


  • Added options "--system=" and "--wm=" for static linking.
  • Option "-s" additionally shows the shared memory file size.


2005-09-05   The ultimate purpose and most beautiful fact about life... to bring new life into being. Nothing in the world can substitute this gorgeous gift of nature. It's the unceasing obligation, to give what one got... In the morning of September 5th, 6:31 CEST, our sweet little son 'Alan' saw the light of day.


2005-03-17   CELF Technical Conference Slides

The DirectFB slides from the CELF Technical Conference 2005 are available now.


2005-03-10   New versions of the video available

Three freshly encoded versions of the FOSDEM 2004 video are available:
Low Quality MP42 49 MB Quality is still okay
Mid Quality MP42 212 MB Only useful to users without an H264 decoder
High Quality H264 205 MB Looks better than the old version


2005-02-28   FlyWithMe 3D Demo using DirectFB only

New demo showing DirectFB's builtin 3D texture mapping method IDirectFBSurface::TextureTriangles() that can use any surface as a texture to render triangles built from an array of X, Y, Z, W, S, T vertices and an optional array of indices.


2005-02-24   DirectFB 0.9.22

We are happy to announce the release of DirectFB 0.9.22 just two months after the last release :-)


  • Added DLCAPS_ALPHA_RAMP: Alpha values for formats with one or two alpha bits can be chosen, i.e. using ARGB1555 or ARGB2554 the user can define the meaning of the two or four possibilities. In short, this feature provides a lookup table for the alpha of these formats.
  • Added DLCAPS_PREMULTIPLIED indicating that a display layer can display surfaces with premultiplied alpha.
  • Added DSCAPS_PREMULTIPLIED indicating that the surface has premultiplied alpha data.
  • Added DLCONF_SURFACE_CAPS and field 'surface_caps' to DFBDisplayLayerConfig to specify any combination of the flags: DSCAPS_INTERLACED, DSCAPS_SEPARATED or DSCAPS_PREMULTIPLIED.
  • Added DLCAPS_SCREEN_POSITION and DLCAPS_SCREEN_SIZE. These are set if DLCAPS_SCREEN_LOCATION is set and vice versa. Unscalable layers just have DLCAPS_SCREEN_POSITION.
  • Added DSECONF_ADJUSTMENT to DFBScreenEncoderConfigFlags.
  • Added 'DFBColorAdjustment adjustment' to DFBScreenEncoderConfig.

API | IDirectFB

  • Cleaned up the way CreateSurface() determines the primary surface pixelformat and size. Previously the behavior varied depending on cooperative level and the force-desktop option. New behavior:
    2. SetVideoMode()
    3. mode= and pixelformat= options
    4. current layer config

API | IDirectFBDisplayLayer

  • Added IDirectFBDisplayLayer::SetScreenPosition() which sets the position of the layer on the screen specified in pixels.
  • Added IDirectFBDisplayLayer::SetScreenRectangle() which sets the position and size of the layer on the screen specified in pixels.

API | IDirectFBSurface

  • Added IDirectFBSurface::SetAlphaRamp(a0,a1,a2,a3): Either all four values or the first and the last one are used, depending on the format. Default values are: 0x00, 0x55, 0xaa, 0xff.
  • Added IDirectFBSurface::FillRectangles().

Build Options

  • Added option "--with-inputdrivers=..." for selecting drivers to build, thanks to Marcel Siegert <>!

Runtime Options

  • Replaced "argb-font" and "a1-font" with a more flexible "font-format" option.
  • Make "graphics-vt" the default.
  • Added "h3600-device", keeping the default of "/dev/ts".
  • Added "mut-device" which must be used to enable the driver.

Pixel Formats

  • Added DSPF_ARGB2554.
  • Added DSPF_ARGB4444.
  • Added DSPF_NV21 (like NV12, but with swapped CbCr).

Software Driver

  • Added support for YUY2/UYVY->RGB conversion (with src colorkeying).
  • Force alignment to even coordinates if blitting YUY2 or UYVY.
  • Added NV12/NV21/NV16 blitting and rectangle filling.
  • Made YV12<->I420 blitting possible.
  • Fixed YUV422 handling on big-endian architectures.
  • Optimized Bop_yuy2_Sto_Aop() and Bop_uyvy_Sto_Aop(), these are used for StretchBlit() using YUY2 or UYVY.

Display Layer Core

  • Keep a list of all realized (added) regions to remove them during emergency shutdown, e.g. signal received or missing deinit of master app.
  • Added CLRCF_SURFACE_CAPS and field 'surface_caps' to CoreLayerRegionConfig in the display layer driver API.
  • HW Windows created with DWDESC_SURFACE_CAPS and DSCAPS_PREMULTIPLIED in 'desc.surface_caps' are created as premultiplied layer regions.
  • Store normalized and pixel based destination area in a layer context.
  • Added CoreLayerLayoutMode which defines incorporation of configuration based size changes and destination area values.
  • Activate the most recent context instead of the primary (shared) context when the current context is removed.
  • Restore color adjustment when (re)activating a context.

Windowing Core

  • Create layer regions for hw windows in single buffered mode, unless explicitly configured using DSCAPS_DOUBLE/TRIPLE or DWCAPS_DOUBLEBUFFER. This is a preliminary solution, because by default a window surface should require a Flip() to make changes visible.
  • Activate DWOP_ALPHACHANNEL for other non indexed alpha formats, too.
  • Implemented hw window resizing.


  • Take the largest one, if multiple tmpfs are found.

Proxy Interface Implementations (Voodoo)

  • Implemented BatchBlit() in IDirectFBSurface_Requester and _Dispatcher.

Fixes (excerpt)

  • Fixed a video memory leak in dfb_surface_reconfig() that happened if a surface with multiple buffers is configured to have less, e.g. switching a layer from DLBM_TRIPLE/BACKVIDEO to DLBM_FRONTONLY.


  • Show the layer level if supported.


  • Added i830 driver (overlay support only) for Servision Ltd. (
  • Note, due to unsolved conflicts regarding ring buffer usage you have to load the "intelfb" module with the parameter "accel=0".


  • Added DSPF_ARGB4444 support.
  • Added DSPF_NV21 support.
  • Added support for G400 dual head add-on (disabled by default).
  • Alpha ramp support for CRTC2.
  • Added support for progressive chroma on CRTC2.
  • Added support for progressive half-height sub-picture.
  • Dropped I420/YV12 support for old chips.
  • NV12/NV21 Blit() for >= G200.
  • NV12/NV21 StretchBlit() for >= G400.
  • Accelerated I420/YV12/NV12/NV21 FillRectangle().
  • YUY2/UYVY FillRectangle(), Blit() and StretchBlit().


  • Perform additional check (returned phys. fb base) before considering the fb driver to be the one that it's expected to be.


  • Experimental alpha blending support for Riva TNT.
  • Fixed NV20 and GeForce3 Xbox support, Blit() should work on the latter now.
  • Added experimental support for NV30 chipsets.
  • Found the way to make NVScaledImageFromMemory (used for StretchBlit, Alphablend, Color Conversion) work on NV20 chipset: it was another rivafb bug, therefore the rivafb-nv20fix-* patch is absolutely required.
  • Added basic support for drawing with alphablend on NV20.
  • Great performance improvements: it's possible to move a translucent window at 32bpp while the cpu stays idle.
  • No longer return a surface stored in system memory for YUY2 and UYVY; return directly the video surface instead.
  • Added FillRectangle() and Blit() (without effects) for YUY2 and UYVY.
  • Added an hack to do StretchBlit() on YUV422 (result is almost acceptable).

Joystick Input

  • Do not dispatch events if unknown or JS_EVENT_INIT are received. Fixes crash upon initialization under some conditions.

DreamBox Remote

  • Added dreamboxremote driver mainly based on dbox2remote, thanks to Marcel Siegert <>!

Unique WM Module

  • Lots of changes that have been lying around for more than two months, but this module is still not fully usable, yet.


2005-02-24   FOSDEM 2004 Video Update

Hmm, I just booted Windows XP myself and tried both versions of the video using Media Player, Creative Labs fooo, The Playa and VLC.

The only player that worked with both versions was VLC. No other player could play back any of these files.

GSpot said that the remuxed file is ok, but starting the rendering process resulted in a DirectShow error about partial rendering blah...

So my only advice is to use VLC or MPlayer for Windows ;-)


2005-02-23   FOSDEM 2004 Video

Now that traffic limitations are gone, I've put the FOSDEM 2004 Presentation Video (remuxed!) online!
Be aware of bad audio quality, but don't miss all the great demos between the slides, especially the OpenGL demo at the end!!!


2005-02-07   The greatest girl and me...

...are proud to enrich the world with a lovely, tiny being some time around August 21st!


2005-02-04   CELF conference demo session review has an article about the demo session that was part of the CELF Technical Conference.


2005-01-01   Happy New Year!

We wish everyone a happy new year and want to let you know about Fedora Core 3 DirectFB packages made by Thomas Vander Stichele, thanks!

dok / Main / News