summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKim Woelders <kim@woelders.dk>2019-11-08 18:54:59 +0100
committerKim Woelders <kim@woelders.dk>2019-11-08 19:29:26 +0100
commit581e6baed8e41cf9bc1f565251bab8cbfdba638b (patch)
tree11495d84b4557c89c3d7fc9bf2162e8eec9b80b1
parent7c426928e9f45489016ec03a07ba607b05c5a07c (diff)
downloadimlib2-581e6baed8e41cf9bc1f565251bab8cbfdba638b.tar.gz
Eliminate WRITE_RGBA()
Potentially causing way more memory access than needed.
-rw-r--r--src/lib/api.c2
-rw-r--r--src/lib/blend.h14
-rw-r--r--src/modules/loaders/loader_tga.c86
3 files changed, 29 insertions, 73 deletions
diff --git a/src/lib/api.c b/src/lib/api.c
index df14286..58044e1 100644
--- a/src/lib/api.c
+++ b/src/lib/api.c
@@ -5470,7 +5470,7 @@ imlib_image_clear_color(int r, int g, int b, int a)
return;
__imlib_DirtyImage(im);
max = im->w * im->h;
- WRITE_RGBA(&col, r, g, b, a);
+ col = PIXEL_ARGB(a, r, g, b);
for (i = 0; i < max; i++)
im->data[i] = col;
}
diff --git a/src/lib/blend.h b/src/lib/blend.h
index 993468e..c848fba 100644
--- a/src/lib/blend.h
+++ b/src/lib/blend.h
@@ -34,20 +34,6 @@
(b) = B_VAL(p); \
(a) = A_VAL(p);
-#define WRITE_RGB(p, r, g, b) \
- R_VAL(p) = (r); \
- G_VAL(p) = (g); \
- B_VAL(p) = (b);
-
-#define WRITE_RGB_PRESERVE_ALPHA(p, r, g, b) \
- WRITE_RGB(p, r, g, b)
-
-#define WRITE_RGBA(p, r, g, b, a) \
- R_VAL(p) = (r); \
- G_VAL(p) = (g); \
- B_VAL(p) = (b); \
- A_VAL(p) = (a);
-
#define INTERSECTS(x, y, w, h, xx, yy, ww, hh) \
((x < (xx + ww)) && \
(y < (yy + hh)) && \
diff --git a/src/modules/loaders/loader_tga.c b/src/modules/loaders/loader_tga.c
index c11b27a..9b2f715 100644
--- a/src/modules/loaders/loader_tga.c
+++ b/src/modules/loaders/loader_tga.c
@@ -338,34 +338,22 @@ load(ImlibImage * im, ImlibProgressFunction progress,
switch (bpp)
{
-
- /* 32-bit BGRA pixels */
- case 32:
- WRITE_RGBA(dataptr, *(bufptr + 2), /* R */
- *(bufptr + 1), /* G */
- *(bufptr + 0), /* B */
- *(bufptr + 3) /* A */
- );
- dataptr++;
+ case 32: /* 32-bit BGRA pixels */
+ *dataptr++ =
+ PIXEL_ARGB(bufptr[3], bufptr[2], bufptr[1],
+ bufptr[0]);
bufptr += 4;
break;
- /* 24-bit BGR pixels */
- case 24:
- WRITE_RGBA(dataptr, *(bufptr + 2), /* R */
- *(bufptr + 1), /* G */
- *(bufptr + 0), /* B */
- (char)0xff /* A */
- );
- dataptr++;
+ case 24: /* 24-bit BGR pixels */
+ *dataptr++ =
+ PIXEL_ARGB(0xff, bufptr[2], bufptr[1], bufptr[0]);
bufptr += 3;
break;
- /* 8-bit grayscale */
- case 8:
- WRITE_RGBA(dataptr, /* grayscale */
- *bufptr, *bufptr, *bufptr, (char)0xff);
- dataptr++;
+ case 8: /* 8-bit grayscale */
+ *dataptr++ =
+ PIXEL_ARGB(0xff, bufptr[0], bufptr[0], bufptr[0]);
bufptr += 1;
break;
}
@@ -400,31 +388,23 @@ load(ImlibImage * im, ImlibProgressFunction progress,
red = *bufptr++;
alpha = *bufptr++;
for (i = 0; (i < count) && (dataptr < final_pixel); i++)
- {
- WRITE_RGBA(dataptr, red, green, blue, alpha);
- dataptr++;
- }
+ *dataptr++ = PIXEL_ARGB(alpha, red, green, blue);
break;
case 24:
blue = *bufptr++;
green = *bufptr++;
red = *bufptr++;
+ alpha = 0xff;
for (i = 0; (i < count) && (dataptr < final_pixel); i++)
- {
- WRITE_RGBA(dataptr, red, green, blue, (char)0xff);
- dataptr++;
- }
+ *dataptr++ = PIXEL_ARGB(alpha, red, green, blue);
break;
case 8:
- alpha = *bufptr++;
+ red = *bufptr++;
+ alpha = 0xff;
for (i = 0; (i < count) && (dataptr < final_pixel); i++)
- {
- WRITE_RGBA(dataptr, alpha, alpha, alpha,
- (char)0xff);
- dataptr++;
- }
+ *dataptr++ = PIXEL_ARGB(alpha, red, red, red);
break;
}
} /* end if (RLE packet) */
@@ -437,34 +417,24 @@ load(ImlibImage * im, ImlibProgressFunction progress,
switch (bpp)
{
-
- /* 32-bit BGRA pixels */
- case 32:
- WRITE_RGBA(dataptr, *(bufptr + 2), /* R */
- *(bufptr + 1), /* G */
- *(bufptr + 0), /* B */
- *(bufptr + 3) /* A */
- );
- dataptr++;
+ case 32: /* 32-bit BGRA pixels */
+ *dataptr++ =
+ PIXEL_ARGB(bufptr[3], bufptr[2], bufptr[1],
+ bufptr[0]);
bufptr += 4;
break;
- /* 24-bit BGR pixels */
- case 24:
- WRITE_RGBA(dataptr, *(bufptr + 2), /* R */
- *(bufptr + 1), /* G */
- *(bufptr + 0), /* B */
- (char)0xff /* A */
- );
- dataptr++;
+ case 24: /* 24-bit BGR pixels */
+ *dataptr++ =
+ PIXEL_ARGB(0xff, bufptr[2], bufptr[1],
+ bufptr[0]);
bufptr += 3;
break;
- /* 8-bit grayscale */
- case 8:
- WRITE_RGBA(dataptr, *bufptr, /* pseudo-grayscale */
- *bufptr, *bufptr, (char)0xff);
- dataptr++;
+ case 8: /* 8-bit grayscale */
+ *dataptr++ =
+ PIXEL_ARGB(0xff, bufptr[0], bufptr[0],
+ bufptr[0]);
bufptr += 1;
break;
}