summaryrefslogtreecommitdiff
path: root/gdk/gdkdraw.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdk/gdkdraw.c')
-rw-r--r--gdk/gdkdraw.c57
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