gallium: added util_pack_color_ub()
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 16 Apr 2008 15:46:38 +0000 (09:46 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 16 Apr 2008 22:53:44 +0000 (16:53 -0600)
src/gallium/auxiliary/util/u_pack_color.h

index cd13823985ebc2174b3765bb07ef60782c63f57f..1f6604c554e537cb4b5e7da12be9e807fb438b47 100644 (file)
 #include "pipe/p_format.h"
 
 
+/**
+ * Pack ubyte R,G,B,A into dest pixel.
+ */
+static INLINE void
+util_pack_color_ub(ubyte r, ubyte g, ubyte b, ubyte a,
+                   enum pipe_format format, void *dest)
+{
+   switch (format) {
+   case PIPE_FORMAT_R8G8B8A8_UNORM:
+      {
+         uint *d = (uint *) dest;
+         *d = (r << 24) | (g << 16) | (b << 8) | a;
+      }
+      return;
+   case PIPE_FORMAT_A8R8G8B8_UNORM:
+      {
+         uint *d = (uint *) dest;
+         *d = (a << 24) | (r << 16) | (g << 8) | b;
+      }
+      return;
+   case PIPE_FORMAT_B8G8R8A8_UNORM:
+      {
+         uint *d = (uint *) dest;
+         *d = (b << 24) | (g << 16) | (r << 8) | a;
+      }
+      return;
+   case PIPE_FORMAT_R5G6B5_UNORM:
+      {
+         ushort *d = (ushort *) dest;
+         *d = ((r & 0xf8) << 8) | ((g & 0xfc) << 3) | (b >> 3);
+      }
+      return;
+   /* XXX lots more cases to add */
+   default:
+      debug_printf("gallium: unhandled format in util_pack_color_ub()");
+   }
+}
+
 /**
  * Note rgba outside [0,1] will be clamped for int pixel formats.
  */