PNG support: use png_const_bytep, so we do not drop const type

This commit is contained in:
Alam Ed Arias 2019-09-17 16:18:54 -04:00
parent e179e1f9c4
commit 2a33ffb7d7
3 changed files with 15 additions and 10 deletions

View File

@ -727,8 +727,8 @@ void HWR_MakePatch (const patch_t *patch, GLPatch_t *grPatch, GLMipmap_t *grMipm
#ifndef NO_PNG_LUMPS #ifndef NO_PNG_LUMPS
// lump is a png so convert it // lump is a png so convert it
size_t len = W_LumpLengthPwad(grPatch->wadnum, grPatch->lumpnum); size_t len = W_LumpLengthPwad(grPatch->wadnum, grPatch->lumpnum);
if ((patch != NULL) && R_IsLumpPNG((UINT8 *)patch, len)) if ((patch != NULL) && R_IsLumpPNG((const UINT8 *)patch, len))
patch = R_PNGToPatch((UINT8 *)patch, len, NULL, true); patch = R_PNGToPatch((const UINT8 *)patch, len, NULL, true);
#endif #endif
// don't do it twice (like a cache) // don't do it twice (like a cache)

View File

@ -2588,7 +2588,7 @@ void R_PatchToFlat(patch_t *patch, UINT8 *flat)
} }
#ifndef NO_PNG_LUMPS #ifndef NO_PNG_LUMPS
boolean R_IsLumpPNG(UINT8 *d, size_t s) boolean R_IsLumpPNG(const UINT8 *d, size_t s)
{ {
if (s < 67) // http://garethrees.org/2007/11/14/pngcrush/ if (s < 67) // http://garethrees.org/2007/11/14/pngcrush/
return false; return false;
@ -2599,8 +2599,12 @@ boolean R_IsLumpPNG(UINT8 *d, size_t s)
} }
#ifdef HAVE_PNG #ifdef HAVE_PNG
#if PNG_LIBPNG_VER_DLLNUM < 14
typedef PNG_CONST png_byte *png_const_bytep;
#endif
typedef struct { typedef struct {
png_bytep buffer; png_const_bytep buffer;
png_uint_32 bufsize; png_uint_32 bufsize;
png_uint_32 current_pos; png_uint_32 current_pos;
} png_io_t; } png_io_t;
@ -2626,6 +2630,7 @@ static png_chunk_t chunk;
static int PNG_ChunkReader(png_structp png_ptr, png_unknown_chunkp chonk) static int PNG_ChunkReader(png_structp png_ptr, png_unknown_chunkp chonk)
{ {
(void)png_ptr;
if (!memcmp(chonk->name, chunkname, 4)) if (!memcmp(chonk->name, chunkname, 4))
{ {
memcpy(chunk.name, chonk->name, 4); memcpy(chunk.name, chonk->name, 4);
@ -2648,7 +2653,7 @@ static void PNG_warn(png_structp PNG, png_const_charp pngtext)
CONS_Debug(DBG_RENDER, "libpng warning at %p: %s", PNG, pngtext); CONS_Debug(DBG_RENDER, "libpng warning at %p: %s", PNG, pngtext);
} }
static png_bytep *PNG_Read(UINT8 *png, UINT16 *w, UINT16 *h, INT16 *topoffset, INT16 *leftoffset, size_t size) static png_bytep *PNG_Read(const UINT8 *png, UINT16 *w, UINT16 *h, INT16 *topoffset, INT16 *leftoffset, size_t size)
{ {
png_structp png_ptr; png_structp png_ptr;
png_infop png_info_ptr; png_infop png_info_ptr;
@ -2697,7 +2702,7 @@ static png_bytep *PNG_Read(UINT8 *png, UINT16 *w, UINT16 *h, INT16 *topoffset, I
#endif #endif
// set our own read_function // set our own read_function
png_io.buffer = (png_bytep)png; png_io.buffer = (png_const_bytep)png;
png_io.bufsize = size; png_io.bufsize = size;
png_io.current_pos = 0; png_io.current_pos = 0;
png_set_read_fn(png_ptr, &png_io, PNG_IOReader); png_set_read_fn(png_ptr, &png_io, PNG_IOReader);
@ -2767,7 +2772,7 @@ static png_bytep *PNG_Read(UINT8 *png, UINT16 *w, UINT16 *h, INT16 *topoffset, I
} }
// Convert a PNG to a raw image. // Convert a PNG to a raw image.
static UINT8 *PNG_RawConvert(UINT8 *png, UINT16 *w, UINT16 *h, INT16 *topoffset, INT16 *leftoffset, size_t size) static UINT8 *PNG_RawConvert(const UINT8 *png, UINT16 *w, UINT16 *h, INT16 *topoffset, INT16 *leftoffset, size_t size)
{ {
UINT8 *flat; UINT8 *flat;
png_uint_32 x, y; png_uint_32 x, y;
@ -2803,7 +2808,7 @@ UINT8 *R_PNGToFlat(levelflat_t *levelflat, UINT8 *png, size_t size)
// Convert a PNG to a patch. // Convert a PNG to a patch.
static unsigned char imgbuf[1<<26]; static unsigned char imgbuf[1<<26];
patch_t *R_PNGToPatch(UINT8 *png, size_t size, size_t *destsize, boolean transparency) patch_t *R_PNGToPatch(const UINT8 *png, size_t size, size_t *destsize, boolean transparency)
{ {
UINT16 width, height; UINT16 width, height;
INT16 topoffset = 0, leftoffset = 0; INT16 topoffset = 0, leftoffset = 0;

View File

@ -165,10 +165,10 @@ void R_PatchToFlat(patch_t *patch, UINT8 *flat);
void R_TextureToFlat(size_t tex, UINT8 *flat); void R_TextureToFlat(size_t tex, UINT8 *flat);
#ifndef NO_PNG_LUMPS #ifndef NO_PNG_LUMPS
boolean R_IsLumpPNG(UINT8 *d, size_t s); boolean R_IsLumpPNG(const UINT8 *d, size_t s);
UINT8 *R_PNGToFlat(levelflat_t *levelflat, UINT8 *png, size_t size); UINT8 *R_PNGToFlat(levelflat_t *levelflat, UINT8 *png, size_t size);
patch_t *R_PNGToPatch(UINT8 *png, size_t size, size_t *destsize, boolean transparency); patch_t *R_PNGToPatch(const UINT8 *png, size_t size, size_t *destsize, boolean transparency);
boolean R_PNGDimensions(UINT8 *png, INT16 *width, INT16 *height, size_t size); boolean R_PNGDimensions(UINT8 *png, INT16 *width, INT16 *height, size_t size);
#endif #endif