--- openarena-engine-source-0.8.8/Makefile +++ openarena-engine-source-0.8.8/Makefile @@ -1406,41 +1406,7 @@ $(B)/client/l_script.o \ $(B)/client/l_struct.o \ \ - $(B)/client/jcapimin.o \ - $(B)/client/jcapistd.o \ - $(B)/client/jccoefct.o \ - $(B)/client/jccolor.o \ - $(B)/client/jcdctmgr.o \ - $(B)/client/jchuff.o \ - $(B)/client/jcinit.o \ - $(B)/client/jcmainct.o \ - $(B)/client/jcmarker.o \ - $(B)/client/jcmaster.o \ - $(B)/client/jcomapi.o \ - $(B)/client/jcparam.o \ - $(B)/client/jcphuff.o \ - $(B)/client/jcprepct.o \ - $(B)/client/jcsample.o \ - $(B)/client/jdapimin.o \ - $(B)/client/jdapistd.o \ $(B)/client/jdatasrc.o \ - $(B)/client/jdcoefct.o \ - $(B)/client/jdcolor.o \ - $(B)/client/jddctmgr.o \ - $(B)/client/jdhuff.o \ - $(B)/client/jdinput.o \ - $(B)/client/jdmainct.o \ - $(B)/client/jdmarker.o \ - $(B)/client/jdmaster.o \ - $(B)/client/jdpostct.o \ - $(B)/client/jdsample.o \ - $(B)/client/jdtrans.o \ - $(B)/client/jerror.o \ - $(B)/client/jfdctflt.o \ - $(B)/client/jidctflt.o \ - $(B)/client/jmemmgr.o \ - $(B)/client/jmemnobs.o \ - $(B)/client/jutils.o \ \ $(B)/client/tr_animation.o \ $(B)/client/tr_backend.o \ --- openarena-engine-source-0.8.8/code/jpeg-6b/jdatasrc.c +++ openarena-engine-source-0.8.8/code/jpeg-6b/jdatasrc.c @@ -15,9 +15,15 @@ */ /* this is not a core library module, so it doesn't define JPEG_INTERNALS */ -#include "jinclude.h" -#include "jpeglib.h" -#include "jerror.h" +#include +#include +#include +#include +#undef METHODDEF +#define METHODDEF static +#undef GLOBAL +#define GLOBAL +#define SIZEOF(object) ((size_t) sizeof(object)) #ifndef MIN #define MIN(a, b) ((a)<(b)?(a):(b)) @@ -44,7 +50,7 @@ * before any data is actually read. */ -METHODDEF(void) +METHODDEF void init_source (j_decompress_ptr cinfo) { my_src_ptr src = (my_src_ptr) cinfo->src; @@ -90,7 +96,7 @@ * the front of the buffer rather than discarding it. */ -METHODDEF(boolean) +METHODDEF boolean fill_input_buffer (j_decompress_ptr cinfo) { my_src_ptr src = (my_src_ptr) cinfo->src; @@ -129,7 +135,7 @@ * buffer is the application writer's problem. */ -METHODDEF(void) +METHODDEF void skip_input_data (j_decompress_ptr cinfo, long num_bytes) { my_src_ptr src = (my_src_ptr) cinfo->src; @@ -170,7 +176,7 @@ * for error exit. */ -METHODDEF(void) +METHODDEF void term_source (j_decompress_ptr cinfo) { /* no work necessary here */ @@ -183,8 +189,8 @@ * for closing it after finishing decompression. */ -GLOBAL(void) -jpeg_mem_src (j_decompress_ptr cinfo, unsigned char *inbuf, size_t size) +GLOBAL void +jpeg_mem_src (j_decompress_ptr cinfo, unsigned char *inbuf, unsigned long size) { my_src_ptr src; --- openarena-engine-source-0.8.8/code/renderer/tr_image_jpg.c +++ openarena-engine-source-0.8.8/code/renderer/tr_image_jpg.c @@ -31,7 +31,7 @@ */ #define JPEG_INTERNALS -#include "../jpeg-6b/jpeglib.h" +#include void R_LoadJPG( const char *filename, unsigned char **pic, int *width, int *height ) { /* This struct contains the JPEG decompression parameters and pointers to @@ -131,7 +131,10 @@ } memcount = pixelcount * 4; - row_stride = cinfo.output_width * cinfo.output_components; + if (3 == cinfo.output_components) + row_stride = cinfo.output_width * 4; + else + row_stride = cinfo.output_width * cinfo.output_components; out = ri.Malloc(memcount); @@ -144,14 +147,26 @@ /* Here we use the library's state variable cinfo.output_scanline as the * loop counter, so that we don't have to keep track ourselves. */ + buf = out; while (cinfo.output_scanline < cinfo.output_height) { /* jpeg_read_scanlines expects an array of pointers to scanlines. * Here the array is only one element long, but you could ask for * more than one scanline at a time if that's more convenient. */ - buf = ((out+(row_stride*cinfo.output_scanline))); buffer = &buf; (void) jpeg_read_scanlines(&cinfo, buffer, 1); + if (3 == cinfo.output_components) { + /* turn RGB into RGBA */ + int ioffset = cinfo.output_width * 3 - 1; + int ooffset = cinfo.output_width * 4 - 1; + do { + buf[ooffset--] = 255; + buf[ooffset--] = buf[ioffset--]; + buf[ooffset--] = buf[ioffset--]; + buf[ooffset--] = buf[ioffset--]; + } while (ioffset > 0); + } + buf += row_stride; } buf = out; @@ -176,7 +191,7 @@ buf[--dindex] = greyshade; } while(sindex); } - else + else if (4 == cinfo.output_components) { // clear all the alphas to 255 int i;