]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - image.c
removed EntityFrame5_ResetDatabase because it was only used in EntityFrame5_AllocDatabase
[xonotic/darkplaces.git] / image.c
diff --git a/image.c b/image.c
index 623ed5891d5837676a446c74f95714a21b3bb32a..fc73fd1bbbb15b697f61d38bcdf6cc8269cce808 100644 (file)
--- a/image.c
+++ b/image.c
@@ -2,6 +2,7 @@
 #include "quakedef.h"
 #include "image.h"
 #include "jpeg.h"
+#include "image_png.h"
 #include "r_shadow.h"
 
 int            image_width;
@@ -180,14 +181,14 @@ typedef struct pcx_s
 LoadPCX
 ============
 */
-unsigned char* LoadPCX (const unsigned char *f, int matchwidth, int matchheight)
+unsigned char* LoadPCX (const unsigned char *f, int filesize, int matchwidth, int matchheight)
 {
        pcx_t pcx;
        unsigned char *a, *b, *image_rgba, *pbuf;
        const unsigned char *palette, *fin, *enddata;
        int x, y, x2, dataByte;
 
-       if (fs_filesize < (int)sizeof(pcx) + 768)
+       if (filesize < (int)sizeof(pcx) + 768)
        {
                Con_Print("Bad pcx file\n");
                return NULL;
@@ -218,7 +219,7 @@ unsigned char* LoadPCX (const unsigned char *f, int matchwidth, int matchheight)
        if ((matchwidth && image_width != matchwidth) || (matchheight && image_height != matchheight))
                return NULL;
 
-       palette = f + fs_filesize - 768;
+       palette = f + filesize - 768;
 
        image_rgba = (unsigned char *)Mem_Alloc(tempmempool, image_width*image_height*4);
        if (!image_rgba)
@@ -297,7 +298,7 @@ void PrintTargaHeader(TargaHeader *t)
 LoadTGA
 =============
 */
-unsigned char *LoadTGA (const unsigned char *f, int matchwidth, int matchheight)
+unsigned char *LoadTGA (const unsigned char *f, int filesize, int matchwidth, int matchheight)
 {
        int x, y, row_inc, compressed, readpixelcount, red, green, blue, alpha, runlen, pindex, alphabits;
        unsigned char *pixbuf, *image_rgba;
@@ -306,10 +307,10 @@ unsigned char *LoadTGA (const unsigned char *f, int matchwidth, int matchheight)
        TargaHeader targa_header;
        unsigned char palette[256*4];
 
-       if (fs_filesize < 19)
+       if (filesize < 19)
                return NULL;
 
-       enddata = f + fs_filesize;
+       enddata = f + filesize;
 
        targa_header.id_length = f[0];
        targa_header.colormap_type = f[1];
@@ -536,11 +537,11 @@ unsigned char *LoadTGA (const unsigned char *f, int matchwidth, int matchheight)
 LoadLMP
 ============
 */
-unsigned char *LoadLMP (const unsigned char *f, int matchwidth, int matchheight, qboolean loadAs8Bit)
+unsigned char *LoadLMP (const unsigned char *f, int filesize, int matchwidth, int matchheight, qboolean loadAs8Bit)
 {
        unsigned char *image_buffer;
 
-       if (fs_filesize < 9)
+       if (filesize < 9)
        {
                Con_Print("LoadLMP: invalid LMP file\n");
                return NULL;
@@ -557,7 +558,7 @@ unsigned char *LoadLMP (const unsigned char *f, int matchwidth, int matchheight,
        if ((matchwidth && image_width != matchwidth) || (matchheight && image_height != matchheight))
                return NULL;
 
-       if (fs_filesize < (fs_offset_t)(8 + image_width * image_height))
+       if (filesize < (8 + image_width * image_height))
        {
                Con_Print("LoadLMP: invalid LMP file\n");
                return NULL;
@@ -571,14 +572,14 @@ unsigned char *LoadLMP (const unsigned char *f, int matchwidth, int matchheight,
        else
        {
                image_buffer = (unsigned char *)Mem_Alloc(tempmempool, image_width * image_height * 4);
-               Image_Copy8bitRGBA(f + 8, image_buffer, image_width * image_height, palette_complete);
+               Image_Copy8bitRGBA(f + 8, image_buffer, image_width * image_height, palette_transparent);
        }
        return image_buffer;
 }
 
-static unsigned char *LoadLMPRGBA (const unsigned char *f, int matchwidth, int matchheight)
+static unsigned char *LoadLMPRGBA (const unsigned char *f, int filesize, int matchwidth, int matchheight)
 {
-       return LoadLMP(f, matchwidth, matchheight, false);
+       return LoadLMP(f, filesize, matchwidth, matchheight, false);
 }
 
 
@@ -593,12 +594,12 @@ typedef struct q2wal_s
        int                     value;
 } q2wal_t;
 
-unsigned char *LoadWAL (const unsigned char *f, int matchwidth, int matchheight)
+unsigned char *LoadWAL (const unsigned char *f, int filesize, int matchwidth, int matchheight)
 {
        unsigned char *image_rgba;
        const q2wal_t *inwal = (const q2wal_t *)f;
 
-       if (fs_filesize < (int) sizeof(q2wal_t))
+       if (filesize < (int) sizeof(q2wal_t))
        {
                Con_Print("LoadWAL: invalid WAL file\n");
                return NULL;
@@ -614,7 +615,7 @@ unsigned char *LoadWAL (const unsigned char *f, int matchwidth, int matchheight)
        if ((matchwidth && image_width != matchwidth) || (matchheight && image_height != matchheight))
                return NULL;
 
-       if ((int) fs_filesize < (int) sizeof(q2wal_t) + (int) LittleLong(inwal->offsets[0]) + image_width * image_height)
+       if (filesize < (int) sizeof(q2wal_t) + (int) LittleLong(inwal->offsets[0]) + image_width * image_height)
        {
                Con_Print("LoadWAL: invalid WAL file\n");
                return NULL;
@@ -655,17 +656,20 @@ void Image_StripImageExtension (const char *in, char *out)
 struct imageformat_s
 {
        const char *formatstring;
-       unsigned char *(*loadfunc)(const unsigned char *f, int matchwidth, int matchheight);
+       unsigned char *(*loadfunc)(const unsigned char *f, int filesize, int matchwidth, int matchheight);
 }
 imageformats[] =
 {
        {"override/%s.tga", LoadTGA},
+       {"override/%s.png", PNG_LoadImage},
        {"override/%s.jpg", JPEG_LoadImage},
        {"textures/%s.tga", LoadTGA},
+       {"textures/%s.png", PNG_LoadImage},
        {"textures/%s.jpg", JPEG_LoadImage},
        {"textures/%s.pcx", LoadPCX},
        {"textures/%s.wal", LoadWAL},
        {"%s.tga", LoadTGA},
+       {"%s.png", PNG_LoadImage},
        {"%s.jpg", JPEG_LoadImage},
        {"%s.pcx", LoadPCX},
        {"%s.lmp", LoadLMPRGBA},
@@ -675,6 +679,7 @@ imageformats[] =
 unsigned char *loadimagepixels (const char *filename, qboolean complain, int matchwidth, int matchheight)
 {
        int i;
+       fs_offset_t filesize;
        unsigned char *f, *data = NULL;
        char basename[MAX_QPATH], name[MAX_QPATH], *c;
        if (developer_memorydebug.integer)
@@ -690,10 +695,10 @@ unsigned char *loadimagepixels (const char *filename, qboolean complain, int mat
        for (i = 0;imageformats[i].formatstring;i++)
        {
                sprintf (name, imageformats[i].formatstring, basename);
-               f = FS_LoadFile(name, tempmempool, true);
+               f = FS_LoadFile(name, tempmempool, true, &filesize);
                if (f)
                {
-                       data = imageformats[i].loadfunc(f, matchwidth, matchheight);
+                       data = imageformats[i].loadfunc(f, filesize, matchwidth, matchheight);
                        Mem_Free(f);
                        if (data)
                        {
@@ -1511,7 +1516,7 @@ void Image_HeightmapToNormalmap(const unsigned char *inpixels, unsigned char *ou
        }
 }
 
-int image_loadskin(imageskin_t *s, char *shadername)
+int image_loadskin(imageskin_t *s, const char *shadername)
 {
        int j;
        unsigned char *bumppixels;