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:
Spoike 2014-02-17 15:31:47 +00:00
parent b499252a4e
commit 832079f0a6
1 changed files with 34 additions and 17 deletions

View File

@ -766,18 +766,30 @@ qboolean LibPNG_Init(void)
{(void **) &qpng_get_error_ptr, "png_get_error_ptr"},
{NULL, NULL}
};
if (!LIBPNG_LOADED())
static qboolean tried;
if (!tried)
{
#ifdef _WIN32
libpng_handle = Sys_LoadLibrary("libpng"STRINGIFY(PNG_LIBPNG_VER_DLLNUM), pngfuncs);
#else
libpng_handle = Sys_LoadLibrary("libpng.so."STRINGIFY(PNG_LIBPNG_VER_SONUM), pngfuncs);
#endif
}
// if (!LIBPNG_LOADED())
// libpng_handle = Sys_LoadLibrary("libpng", pngfuncs);
tried = true;
if (!LIBPNG_LOADED())
{
char *libname;
#ifdef _WIN32
libname = va("libpng%i", PNG_LIBPNG_VER_DLLNUM);
#else
if (PNG_LIBPNG_VER_SONUM == 0)
libname = "libpng.so";
else
libname = va("libpng.so.%i", PNG_LIBPNG_VER_SONUM);
#endif
libpng_handle = Sys_LoadLibrary(libname, pngfuncs);
if (!libpng_handle)
Con_Printf("Unable to load %s\n", libname);
}
// if (!LIBPNG_LOADED())
// libpng_handle = Sys_LoadLibrary("libpng", pngfuncs);
}
#endif
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);
}
qbyte *png_rgba;
qbyte *ReadPNGFile(qbyte *buf, int length, int *width, int *height, const char *fname)
{
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;
struct pngerr errctx;
if (!LibPNG_Init())
return NULL;
memcpy(header, buf, 8);
errctx.fname = fname;
@ -842,23 +856,23 @@ error:
if (rowpointers)
BZ_Free(rowpointers);
qpng_destroy_read_struct(&png, &pnginfo, NULL);
return (png_rgba = NULL);
return NULL;
}
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)))
{
return (png_rgba = NULL);
return NULL;
}
if (!(pnginfo = qpng_create_info_struct(png)))
{
qpng_destroy_read_struct(&png, &pnginfo, NULL);
return (png_rgba = NULL);
return NULL;
}
ri.data=buf;
@ -915,7 +929,7 @@ error:
{
Con_Printf ("Bad PNG color depth and/or bpp (%s)\n", fname);
qpng_destroy_read_struct(&png, &pnginfo, NULL);
return (png_rgba = NULL);
return NULL;
}
data = BZF_Malloc(*height * rowbytes);
@ -932,7 +946,7 @@ error:
qpng_destroy_read_struct(&png, &pnginfo, NULL);
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)))
return false;
if (!LibPNG_Init())
return false;
if (!(fp = fopen (name, "wb")))
{
FS_CreatePath (filename, FS_GAMEONLY);