]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - image.c
Merge branch 'Mario/dpk_support' of gitlab.com:xonotic/darkplaces
[xonotic/darkplaces.git] / image.c
diff --git a/image.c b/image.c
index e107a73cdfd6790b48dccd620b1e7a098c604ce9..ed498ed6562ce832080410a4fc25a9378aeb4727 100644 (file)
--- a/image.c
+++ b/image.c
@@ -21,7 +21,7 @@ static void Image_CopyAlphaFromBlueBGRA(unsigned char *outpixels, const unsigned
 
 #if 1
 // written by LadyHavoc in a readable way, optimized by Vic, further optimized by LadyHavoc (the non-special index case), readable version preserved below this
-void Image_CopyMux(unsigned char *outpixels, const unsigned char *inpixels, int inputwidth, int inputheight, qboolean inputflipx, qboolean inputflipy, qboolean inputflipdiagonal, int numoutputcomponents, int numinputcomponents, int *outputinputcomponentindices)
+void Image_CopyMux(unsigned char *outpixels, const unsigned char *inpixels, int inputwidth, int inputheight, qbool inputflipx, qbool inputflipy, qbool inputflipdiagonal, int numoutputcomponents, int numinputcomponents, int *outputinputcomponentindices)
 {
        int index, c, x, y;
        const unsigned char *in, *line;
@@ -70,7 +70,7 @@ void Image_CopyMux(unsigned char *outpixels, const unsigned char *inpixels, int
 }
 #else
 // intentionally readable version
-void Image_CopyMux(unsigned char *outpixels, const unsigned char *inpixels, int inputwidth, int inputheight, qboolean inputflipx, qboolean inputflipy, qboolean inputflipdiagonal, int numoutputcomponents, int numinputcomponents, int *outputinputcomponentindices)
+void Image_CopyMux(unsigned char *outpixels, const unsigned char *inpixels, int inputwidth, int inputheight, qbool inputflipx, qbool inputflipy, qbool inputflipdiagonal, int numoutputcomponents, int numinputcomponents, int *outputinputcomponentindices)
 {
        int index, c, x, y;
        const unsigned char *in, *inrow, *incolumn;
@@ -283,7 +283,7 @@ static unsigned char* LoadPCX_BGRA (const unsigned char *f, int filesize, int *m
 LoadPCX
 ============
 */
-qboolean LoadPCX_QWSkin(const unsigned char *f, int filesize, unsigned char *pixels, int outwidth, int outheight)
+qbool LoadPCX_QWSkin(const unsigned char *f, int filesize, unsigned char *pixels, int outwidth, int outheight)
 {
        pcx_t pcx;
        unsigned char *a;
@@ -362,7 +362,7 @@ qboolean LoadPCX_QWSkin(const unsigned char *f, int filesize, unsigned char *pix
 LoadPCX
 ============
 */
-qboolean LoadPCX_PaletteOnly(const unsigned char *f, int filesize, unsigned char *palette768b)
+qbool LoadPCX_PaletteOnly(const unsigned char *f, int filesize, unsigned char *palette768b)
 {
        if (filesize < 768)
                return false;
@@ -797,7 +797,7 @@ static unsigned char *LoadWAL_BGRA (const unsigned char *f, int filesize, int *m
        return image_buffer;
 }
 
-qboolean LoadWAL_GetMetadata(const unsigned char *f, int filesize, int *retwidth, int *retheight, int *retflags, int *retvalue, int *retcontents, char *retanimname32c)
+qbool LoadWAL_GetMetadata(const unsigned char *f, int filesize, int *retwidth, int *retheight, int *retflags, int *retvalue, int *retcontents, char *retanimname32c)
 {
        const q2wal_t *inwal = (const q2wal_t *)f;
 
@@ -878,7 +878,7 @@ static unsigned char* LoadLMP_BGRA(const unsigned char *f, int filesize, int *mi
 }
 
 // gfx/conchars is a raw 128x128 image with 0 as transparent color rather than 255
-unsigned char *LoadConChars_BGRA(const unsigned char *f, int filesize, int *miplevel)
+static unsigned char *LoadConChars_BGRA(const unsigned char *f, int filesize, int *miplevel)
 {
        unsigned char *image_buffer;
        int i;
@@ -1040,10 +1040,11 @@ imageformat_t imageformats_other[] =
 };
 
 int fixtransparentpixels(unsigned char *data, int w, int h);
-unsigned char *loadimagepixelsbgra (const char *filename, qboolean complain, qboolean allowFixtrans, qboolean convertsRGB, int *miplevel)
+unsigned char *loadimagepixelsbgra (const char *filename, qbool complain, qbool allowFixtrans, qbool convertsRGB, int *miplevel)
 {
        fs_offset_t filesize;
        imageformat_t *firstformat, *format;
+       int mymiplevel;
        unsigned char *f, *data = NULL, *data2 = NULL;
        char basename[MAX_QPATH], name[MAX_QPATH], name2[MAX_QPATH], path[MAX_QPATH], afterpath[MAX_QPATH], *c;
        char vabuf[1024];
@@ -1083,10 +1084,12 @@ unsigned char *loadimagepixelsbgra (const char *filename, qboolean complain, qbo
        for (format = firstformat;format->formatstring;format++)
        {
                dpsnprintf (name, sizeof(name), format->formatstring, basename);
-               f = FS_LoadFile(name, tempmempool, true, &filesize);
-               if (f)
+
+               FS_SanitizePath(name);
+
+               if(FS_FileExists(name) && (f = FS_LoadFile(name, tempmempool, true, &filesize)) != NULL)
                {
-                       int mymiplevel = miplevel ? *miplevel : 0;
+                       mymiplevel = miplevel ? *miplevel : 0;
                        image_width = 0;
                        image_height = 0;
                        data = format->loadfunc(f, (int)filesize, &mymiplevel);
@@ -1152,7 +1155,7 @@ unsigned char *loadimagepixelsbgra (const char *filename, qboolean complain, qbo
                        if (developer_loading.integer)
                                Con_Printf("loading gfx.wad lump \"%s\"\n", afterpath);
 
-                       int mymiplevel = miplevel ? *miplevel : 0;
+                       mymiplevel = miplevel ? *miplevel : 0;
                        if (!strcmp(afterpath, "conchars"))
                        {
                                // conchars is a raw image and with color 0 as transparent instead of 255
@@ -1190,7 +1193,7 @@ unsigned char *loadimagepixelsbgra (const char *filename, qboolean complain, qbo
        return NULL;
 }
 
-qboolean Image_GetStockPicSize(const char *filename, int *returnwidth, int *returnheight)
+qbool Image_GetStockPicSize(const char *filename, int *returnwidth, int *returnheight)
 {
        unsigned char *data;
        fs_offset_t filesize;
@@ -1239,7 +1242,7 @@ qboolean Image_GetStockPicSize(const char *filename, int *returnwidth, int *retu
 }
 
 extern cvar_t gl_picmip;
-rtexture_t *loadtextureimage (rtexturepool_t *pool, const char *filename, qboolean complain, int flags, qboolean allowFixtrans, qboolean sRGB)
+rtexture_t *loadtextureimage (rtexturepool_t *pool, const char *filename, qbool complain, int flags, qbool allowFixtrans, qbool sRGB)
 {
        unsigned char *data;
        rtexture_t *rt;
@@ -1370,20 +1373,20 @@ int fixtransparentpixels(unsigned char *data, int w, int h)
        return changedPixels;
 }
 
-void Image_FixTransparentPixels_f(void)
+void Image_FixTransparentPixels_f(cmd_state_t *cmd)
 {
        const char *filename, *filename_pattern;
        fssearch_t *search;
        int i, n;
        char outfilename[MAX_QPATH], buf[MAX_QPATH];
        unsigned char *data;
-       if(Cmd_Argc() != 2)
+       if(Cmd_Argc(cmd) != 2)
        {
-               Con_Printf("Usage: %s imagefile\n", Cmd_Argv(0));
+               Con_Printf("Usage: %s imagefile\n", Cmd_Argv(cmd, 0));
                return;
        }
-       filename_pattern = Cmd_Argv(1);
-       search = FS_Search(filename_pattern, true, true);
+       filename_pattern = Cmd_Argv(cmd, 1);
+       search = FS_Search(filename_pattern, true, true, NULL);
        if(!search)
                return;
        for(i = 0; i < search->numfilenames; ++i)
@@ -1406,9 +1409,9 @@ void Image_FixTransparentPixels_f(void)
        FS_FreeSearch(search);
 }
 
-qboolean Image_WriteTGABGR_preflipped (const char *filename, int width, int height, const unsigned char *data)
+qbool Image_WriteTGABGR_preflipped (const char *filename, int width, int height, const unsigned char *data)
 {
-       qboolean ret;
+       qbool ret;
        unsigned char buffer[18];
        const void *buffers[2];
        fs_offset_t sizes[2];
@@ -1430,12 +1433,12 @@ qboolean Image_WriteTGABGR_preflipped (const char *filename, int width, int heig
        return ret;
 }
 
-qboolean Image_WriteTGABGRA (const char *filename, int width, int height, const unsigned char *data)
+qbool Image_WriteTGABGRA (const char *filename, int width, int height, const unsigned char *data)
 {
        int y;
        unsigned char *buffer, *out;
        const unsigned char *in, *end;
-       qboolean ret;
+       qbool ret;
 
        buffer = (unsigned char *)Mem_Alloc(tempmempool, width*height*4 + 18);
 
@@ -1804,10 +1807,8 @@ void Image_HeightmapToNormalmap_BGRA(const unsigned char *inpixels, unsigned cha
        }
 }
 
-static const unsigned char concharimage[] =
-{
+
 #include "lhfont.h"
-};
 
 static unsigned char *Image_GenerateConChars(void)
 {
@@ -2094,7 +2095,7 @@ unsigned char *Image_GetEmbeddedPicBGRA(const char *name)
                        return data;
                }
        }
-       if (!strcmp(name, "white"))
+       if (!strcmp(name, "white") || !strcmp(name, "#white") || !strcmp(name, "*white") || !strcmp(name, "$whiteimage"))
                return Image_GenerateWhite();
        if (!strcmp(name, "gfx/conchars"))
                return Image_GenerateConChars();