From 230d756ff0fadaf267adb07ba087ba4d424973c0 Mon Sep 17 00:00:00 2001 From: havoc Date: Fri, 20 Feb 2004 16:31:03 +0000 Subject: [PATCH] upgraded Image_CopyMux to be able to output constant byte values as well as indexed components git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@3911 d7cf8633-e32d-0410-b094-e92efae38249 --- image.c | 12 +++++++++--- image.h | 2 ++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/image.c b/image.c index b46e3f4f..192cb568 100644 --- a/image.c +++ b/image.c @@ -9,7 +9,7 @@ int image_height; void Image_CopyMux(qbyte *outpixels, const qbyte *inpixels, int width, int height, int flipx, int flipy, int flipdiagonal, int numincomponents, int numoutcomponents, int *inputcomponentindices) { - int c, x, y; + int index, c, x, y; const qbyte *in, *inrow, *incolumn; if (flipdiagonal) { @@ -20,7 +20,10 @@ void Image_CopyMux(qbyte *outpixels, const qbyte *inpixels, int width, int heigh { in = incolumn + (flipy ? height - 1 - x : x) * width * numincomponents; for (c = 0;c < numoutcomponents;c++) - *outpixels++ = in[inputcomponentindices[c]]; + { + index = inputcomponentindices[c]; + *outpixels++ = (index & 0x80000000) ? (index - 0x8000000) : in[index]; + } } } } @@ -33,7 +36,10 @@ void Image_CopyMux(qbyte *outpixels, const qbyte *inpixels, int width, int heigh { in = inrow + (flipx ? width - 1 - x : x) * numincomponents; for (c = 0;c < numoutcomponents;c++) - *outpixels++ = in[inputcomponentindices[c]]; + { + index = inputcomponentindices[c]; + *outpixels++ = (index & 0x80000000) ? (index - 0x8000000) : in[index]; + } } } } diff --git a/image.h b/image.h index f85a8060..08b21f0f 100644 --- a/image.h +++ b/image.h @@ -4,6 +4,8 @@ // swizzle components (even converting number of components) and flip images // (warning: input must be different than output due to non-linear read/write) +// (tip: inputcomponentindices can contain values | 0x80000000 to tell it to +// store them directly into output, so 255 | 0x80000000 would write 255) void Image_CopyMux(qbyte *outpixels, const qbyte *inpixels, int width, int height, int flipx, int flipy, int flipdiagonal, int numincomponents, int numoutcomponents, int *inputcomponentindices); // applies gamma correction to RGB pixels, in can be the same as out -- 2.39.2