static void unpack_grey8(struct pixel *unp, void *pptr, int count);
static void unpack_rgb24(struct pixel *unp, void *pptr, int count);
static void unpack_rgba32(struct pixel *unp, void *pptr, int count);
+static void unpack_bgra32(struct pixel *unp, void *pptr, int count);
static void unpack_greyf(struct pixel *unp, void *pptr, int count);
static void unpack_rgbf(struct pixel *unp, void *pptr, int count);
static void unpack_rgbaf(struct pixel *unp, void *pptr, int count);
static void pack_grey8(void *pptr, struct pixel *unp, int count);
static void pack_rgb24(void *pptr, struct pixel *unp, int count);
static void pack_rgba32(void *pptr, struct pixel *unp, int count);
+static void pack_bgra32(void *pptr, struct pixel *unp, int count);
static void pack_greyf(void *pptr, struct pixel *unp, int count);
static void pack_rgbf(void *pptr, struct pixel *unp, int count);
static void pack_rgbaf(void *pptr, struct pixel *unp, int count);
unpack_grey8,
unpack_rgb24,
unpack_rgba32,
+ unpack_bgra32,
unpack_greyf,
unpack_rgbf,
unpack_rgbaf,
pack_grey8,
pack_rgb24,
pack_rgba32,
+ pack_bgra32,
pack_greyf,
pack_rgbf,
pack_rgbaf,
}
}
+static void unpack_bgra32(struct pixel *unp, void *pptr, int count)
+{
+ int i;
+ unsigned char *pix = pptr;
+
+ for(i=0; i<count; i++) {
+ unp->b = (float)*pix++ / 255.0;
+ unp->g = (float)*pix++ / 255.0;
+ unp->r = (float)*pix++ / 255.0;
+ unp->a = (float)*pix++ / 255.0;
+ unp++;
+ }
+}
+
static void unpack_greyf(struct pixel *unp, void *pptr, int count)
{
int i;
for(i=0; i<count; i++) {
uint16_t r, g, b, p = *pix++;
- r = (p & 0x1f) << 3;
- if(r & 8) r |= 7; /* fill LSbits with whatever bit 0 was */
+ b = (p & 0x1f) << 3;
+ if(b & 8) b |= 7; /* fill LSbits with whatever bit 0 was */
g = (p >> 2) & 0xfc;
if(g & 4) g |= 3; /* ditto */
- b = (p >> 8) & 0xf8;
- if(b & 8) r |= 7; /* same */
+ r = (p >> 8) & 0xf8;
+ if(r & 8) r |= 7; /* same */
unp->r = (float)r / 255.0f;
unp->g = (float)g / 255.0f;
}
}
+static void pack_bgra32(void *pptr, struct pixel *unp, int count)
+{
+ int i;
+ unsigned char *pix = pptr;
+
+ for(i=0; i<count; i++) {
+ int r = (int)(unp->r * 255.0);
+ int g = (int)(unp->g * 255.0);
+ int b = (int)(unp->b * 255.0);
+ int a = (int)(unp->a * 255.0);
+
+ *pix++ = CLAMP(b, 0, 255);
+ *pix++ = CLAMP(g, 0, 255);
+ *pix++ = CLAMP(r, 0, 255);
+ *pix++ = CLAMP(a, 0, 255);
+ unp++;
+ }
+}
+
static void pack_greyf(void *pptr, struct pixel *unp, int count)
{
int i;
uint16_t *pix = pptr;
for(i=0; i<count; i++) {
- uint16_t r = (uint16_t)(unp->r * 255.0f);
- uint16_t g = (uint16_t)(unp->g * 255.0f);
- uint16_t b = (uint16_t)(unp->b * 255.0f);
- if(r > 255) r = 255;
- if(g > 255) g = 255;
- if(b > 255) b = 255;
- *pix++ = (r >> 3) | ((g & 0x3f) << 2) | ((b & 0x1f) << 8);
+ uint16_t r = (uint16_t)(unp->r * 31.0f);
+ uint16_t g = (uint16_t)(unp->g * 63.0f);
+ uint16_t b = (uint16_t)(unp->b * 31.0f);
+ if(r > 31) r = 31;
+ if(g > 63) g = 63;
+ if(b > 31) b = 31;
+ *pix++ = (r << 11) | (g << 5) | b;
unp++;
}
}