Fixed dynamic linking issues... properly.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4616 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
b499252a4e
commit
832079f0a6
1 changed files with 34 additions and 17 deletions
|
@ -766,18 +766,30 @@ qboolean LibPNG_Init(void)
|
||||||
{(void **) &qpng_get_error_ptr, "png_get_error_ptr"},
|
{(void **) &qpng_get_error_ptr, "png_get_error_ptr"},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
static qboolean tried;
|
||||||
|
if (!tried)
|
||||||
|
{
|
||||||
|
tried = true;
|
||||||
|
|
||||||
if (!LIBPNG_LOADED())
|
if (!LIBPNG_LOADED())
|
||||||
{
|
{
|
||||||
|
char *libname;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
libpng_handle = Sys_LoadLibrary("libpng"STRINGIFY(PNG_LIBPNG_VER_DLLNUM), pngfuncs);
|
libname = va("libpng%i", PNG_LIBPNG_VER_DLLNUM);
|
||||||
#else
|
#else
|
||||||
libpng_handle = Sys_LoadLibrary("libpng.so."STRINGIFY(PNG_LIBPNG_VER_SONUM), pngfuncs);
|
if (PNG_LIBPNG_VER_SONUM == 0)
|
||||||
|
libname = "libpng.so";
|
||||||
|
else
|
||||||
|
libname = va("libpng.so.%i", PNG_LIBPNG_VER_SONUM);
|
||||||
#endif
|
#endif
|
||||||
|
libpng_handle = Sys_LoadLibrary(libname, pngfuncs);
|
||||||
|
if (!libpng_handle)
|
||||||
|
Con_Printf("Unable to load %s\n", libname);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (!LIBPNG_LOADED())
|
// if (!LIBPNG_LOADED())
|
||||||
// libpng_handle = Sys_LoadLibrary("libpng", pngfuncs);
|
// libpng_handle = Sys_LoadLibrary("libpng", pngfuncs);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
return LIBPNG_LOADED();
|
return LIBPNG_LOADED();
|
||||||
}
|
}
|
||||||
|
@ -819,7 +831,6 @@ static void VARGS png_onwarning(png_structp png_ptr, png_const_charp warning_msg
|
||||||
Con_Printf("libpng %s: %s\n", err->fname, warning_msg);
|
Con_Printf("libpng %s: %s\n", err->fname, warning_msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
qbyte *png_rgba;
|
|
||||||
qbyte *ReadPNGFile(qbyte *buf, int length, int *width, int *height, const char *fname)
|
qbyte *ReadPNGFile(qbyte *buf, int length, int *width, int *height, const char *fname)
|
||||||
{
|
{
|
||||||
qbyte header[8], **rowpointers = NULL, *data = NULL;
|
qbyte header[8], **rowpointers = NULL, *data = NULL;
|
||||||
|
@ -831,6 +842,9 @@ qbyte *ReadPNGFile(qbyte *buf, int length, int *width, int *height, const char *
|
||||||
png_uint_32 pngwidth, pngheight;
|
png_uint_32 pngwidth, pngheight;
|
||||||
struct pngerr errctx;
|
struct pngerr errctx;
|
||||||
|
|
||||||
|
if (!LibPNG_Init())
|
||||||
|
return NULL;
|
||||||
|
|
||||||
memcpy(header, buf, 8);
|
memcpy(header, buf, 8);
|
||||||
|
|
||||||
errctx.fname = fname;
|
errctx.fname = fname;
|
||||||
|
@ -842,23 +856,23 @@ error:
|
||||||
if (rowpointers)
|
if (rowpointers)
|
||||||
BZ_Free(rowpointers);
|
BZ_Free(rowpointers);
|
||||||
qpng_destroy_read_struct(&png, &pnginfo, NULL);
|
qpng_destroy_read_struct(&png, &pnginfo, NULL);
|
||||||
return (png_rgba = NULL);
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qpng_sig_cmp(header, 0, 8))
|
if (qpng_sig_cmp(header, 0, 8))
|
||||||
{
|
{
|
||||||
return (png_rgba = NULL);
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(png = qpng_create_read_struct(PNG_LIBPNG_VER_STRING, &errctx, png_onerror, png_onwarning)))
|
if (!(png = qpng_create_read_struct(PNG_LIBPNG_VER_STRING, &errctx, png_onerror, png_onwarning)))
|
||||||
{
|
{
|
||||||
return (png_rgba = NULL);
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(pnginfo = qpng_create_info_struct(png)))
|
if (!(pnginfo = qpng_create_info_struct(png)))
|
||||||
{
|
{
|
||||||
qpng_destroy_read_struct(&png, &pnginfo, NULL);
|
qpng_destroy_read_struct(&png, &pnginfo, NULL);
|
||||||
return (png_rgba = NULL);
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ri.data=buf;
|
ri.data=buf;
|
||||||
|
@ -915,7 +929,7 @@ error:
|
||||||
{
|
{
|
||||||
Con_Printf ("Bad PNG color depth and/or bpp (%s)\n", fname);
|
Con_Printf ("Bad PNG color depth and/or bpp (%s)\n", fname);
|
||||||
qpng_destroy_read_struct(&png, &pnginfo, NULL);
|
qpng_destroy_read_struct(&png, &pnginfo, NULL);
|
||||||
return (png_rgba = NULL);
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
data = BZF_Malloc(*height * rowbytes);
|
data = BZF_Malloc(*height * rowbytes);
|
||||||
|
@ -932,7 +946,7 @@ error:
|
||||||
|
|
||||||
qpng_destroy_read_struct(&png, &pnginfo, NULL);
|
qpng_destroy_read_struct(&png, &pnginfo, NULL);
|
||||||
BZ_Free(rowpointers);
|
BZ_Free(rowpointers);
|
||||||
return (png_rgba = data);
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -951,6 +965,9 @@ int Image_WritePNG (char *filename, int compression, qbyte *pixels, int width, i
|
||||||
if (!FS_NativePath(filename, FS_GAMEONLY, name, sizeof(name)))
|
if (!FS_NativePath(filename, FS_GAMEONLY, name, sizeof(name)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (!LibPNG_Init())
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!(fp = fopen (name, "wb")))
|
if (!(fp = fopen (name, "wb")))
|
||||||
{
|
{
|
||||||
FS_CreatePath (filename, FS_GAMEONLY);
|
FS_CreatePath (filename, FS_GAMEONLY);
|
||||||
|
|
Loading…
Reference in a new issue