]> de.git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
support libpng 1.5.0
authordivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Sat, 11 Feb 2012 15:55:36 +0000 (15:55 +0000)
committerdivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Sat, 11 Feb 2012 15:55:36 +0000 (15:55 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@11677 d7cf8633-e32d-0410-b094-e92efae38249

image_png.c

index 9c03f8f3c05be418a2cd97c36a243281e06d6a2e..e498b9e5f2743aa34c83932bc390ed126e444bf3 100644 (file)
@@ -63,6 +63,7 @@ static unsigned int                   (*qpng_access_version_number)           (void); // FIXME is this re
 static void                            (*qpng_write_info)                      (void*, void*);
 static void                            (*qpng_write_row)                       (void*, unsigned char*);
 static void                            (*qpng_write_end)                       (void*, void*);
+static void*                           (*qpng_jmpbuf)          (void*);
 
 static dllfunction_t pngfuncs[] =
 {
@@ -99,6 +100,7 @@ static dllfunction_t pngfuncs[] =
        {"png_write_info",                      (void **) &qpng_write_info},
        {"png_write_row",                       (void **) &qpng_write_row},
        {"png_write_end",                       (void **) &qpng_write_end},
+       {"png_jmpbuf",          (void **) &qpng_jmpbuf},
        {NULL, NULL}
 };
 
@@ -126,13 +128,17 @@ qboolean PNG_OpenLibrary (void)
        const char* dllnames [] =
        {
 #if WIN32
+               "libpng15-15.dll",
+               "libpng15.dll",
                "libpng14-14.dll",
                "libpng14.dll",
                "libpng12.dll",
 #elif defined(MACOSX)
+               "libpng15.15.dylib",
                "libpng14.14.dylib",
                "libpng12.0.dylib",
 #else
+               "libpng15.so.15", // WTF libtool guidelines anyone?
                "libpng14.so.14", // WTF libtool guidelines anyone?
                "libpng12.so.0",
                "libpng.so", // FreeBSD
@@ -171,6 +177,7 @@ void PNG_CloseLibrary (void)
 
 #define PNG_LIBPNG_VER_STRING_12 "1.2.4"
 #define PNG_LIBPNG_VER_STRING_14 "1.4.0"
+#define PNG_LIBPNG_VER_STRING_15 "1.5.0"
 
 #define PNG_COLOR_MASK_PALETTE    1
 #define PNG_COLOR_MASK_COLOR      2
@@ -273,7 +280,9 @@ unsigned char *PNG_LoadImage_BGRA (const unsigned char *raw, int filesize, int *
        if(qpng_sig_cmp(raw, 0, filesize))
                return NULL;
        png = (void *)qpng_create_read_struct(
-               (qpng_access_version_number() / 100 == 102) ? PNG_LIBPNG_VER_STRING_12 : PNG_LIBPNG_VER_STRING_14, // nasty hack to support both libpng12 and libpng14
+               (qpng_access_version_number() / 100 == 102) ? PNG_LIBPNG_VER_STRING_12 :
+               (qpng_access_version_number() / 100 == 104) ? PNG_LIBPNG_VER_STRING_14 :
+               PNG_LIBPNG_VER_STRING_15, // nasty hack... whatever
                0, PNG_error_fn, PNG_warning_fn
        );
        if(!png)
@@ -285,17 +294,7 @@ unsigned char *PNG_LoadImage_BGRA (const unsigned char *raw, int filesize, int *
 
        // NOTE: this relies on jmp_buf being the first thing in the png structure
        // created by libpng! (this is correct for libpng 1.2.x)
-#ifdef __cplusplus
-#ifdef WIN64
-       if (setjmp((_JBTYPE *)png))
-#elif defined(MACOSX) || defined(WIN32)
-       if (setjmp((int *)png))
-#else
-       if (setjmp((__jmp_buf_tag *)png))
-#endif
-#else
-       if (setjmp(png))
-#endif
+       if (setjmp(qpng_jmpbuf(png)))
        {
                if (my_png.Data)
                        Mem_Free(my_png.Data);