diff options
Diffstat (limited to 'gdk/gdkdraw.c')
-rw-r--r-- | gdk/gdkdraw.c | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/gdk/gdkdraw.c b/gdk/gdkdraw.c index ab4d8530e..39c8f7f22 100644 --- a/gdk/gdkdraw.c +++ b/gdk/gdkdraw.c @@ -730,7 +730,13 @@ gdk_draw_image (GdkDrawable *drawable, * * The clip mask of @gc is ignored, but clip rectangles and clip regions work * fine. - * + * + * If GDK is built with the Sun mediaLib library, the gdk_draw_pixbuf + * function is accelerated using mediaLib, which provides hardware + * acceleration on Intel, AMD, and Sparc chipsets. If desired, mediaLib + * support can be turned off by setting the GDK_DISABLE_MEDIALIB environment + * variable. + * * Since: 2.2 **/ void @@ -1361,6 +1367,44 @@ composite_0888 (guchar *src_buf, } } +#ifdef USE_MEDIALIB +static void +composite_0888_medialib (guchar *src_buf, + gint src_rowstride, + guchar *dest_buf, + gint dest_rowstride, + GdkByteOrder dest_byte_order, + gint width, + gint height) +{ + guchar *src = src_buf; + guchar *dest = dest_buf; + + mlib_image img_src, img_dst; + + mlib_ImageSetStruct (&img_dst, + MLIB_BYTE, + 4, + width, + height, + dest_rowstride, + dest_buf); + + mlib_ImageSetStruct (&img_src, + MLIB_BYTE, + 4, + width, + height, + src_rowstride, + src_buf); + + if (dest_byte_order == GDK_LSB_FIRST) + mlib_ImageBlendRGBA2BGRA (&img_dst, &img_src); + else + mlib_ImageBlendRGBA2ARGB (&img_dst, &img_src); +} +#endif + static void composite_565 (guchar *src_buf, gint src_rowstride, @@ -1558,7 +1602,16 @@ gdk_drawable_real_draw_pixbuf (GdkDrawable *drawable, visual->red_mask == 0xff0000 && visual->green_mask == 0x00ff00 && visual->blue_mask == 0x0000ff) - composite_func = composite_0888; + { +#ifdef USE_MEDIALIB + if (_gdk_use_medialib ()) + composite_func = composite_0888_medialib; + else + composite_func = composite_0888; +#else + composite_func = composite_0888; +#endif + } } /* We can't use our composite func if we are required to dither |