Ticket #37043: patch-ARB-glpng.c.diff

File patch-ARB-glpng.c.diff, 6.4 KB (added by mattcottrell, 11 years ago)

Patch for glpng.c

  • GL/glpng/glpng.c

    old new  
    3838#include <png.h>
    3939
    4040#if 0
    41 #define PNG_CHECK_SIG(header,size) png_check_sig(header,size) // old libpng
     41#define GLPNG_CHECK_SIG(header,size) png_check_sig(header,size) // old libpng
    4242#else
    43 #define PNG_CHECK_SIG(header,size) (png_sig_cmp(header,0,size)==0)
     43#define GLPNG_CHECK_SIG(header,size) (png_sig_cmp(header,0,size)==0)
    4444#endif
    4545
    4646/* Used to decide if GL/gl.h supports the paletted extension */
     
    284284    if (pinfo == NULL) return 0;
    285285
    286286    fread(header, 1, 8, fp);
    287     if (!PNG_CHECK_SIG(header, 8)) return 0;
     287    if (!GLPNG_CHECK_SIG(header, 8)) return 0;
    288288
    289289    png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
    290290    info = png_create_info_struct(png);
    291291    endinfo = png_create_info_struct(png);
    292292
    293293    // DH: added following lines
    294     if (setjmp(png->jmpbuf))
     294    if (setjmp(png_jmpbuf(png)))
    295295    {
    296296        png_destroy_read_struct(&png, &info, &endinfo);
    297297        return 0;
     
    389389    png_uint_32 i;
    390390
    391391    fread(header, 1, 8, fp);
    392     if (!PNG_CHECK_SIG(header, 8)) return 0;
     392    if (!GLPNG_CHECK_SIG(header, 8)) return 0;
    393393
    394394    png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
    395395    info = png_create_info_struct(png);
     
    437437    if (color == PNG_COLOR_TYPE_GRAY || color == PNG_COLOR_TYPE_GRAY_ALPHA)
    438438        png_set_gray_to_rgb(png);
    439439
    440     if (color&PNG_COLOR_MASK_ALPHA && trans != PNG_ALPHA) {
     440    if (color&PNG_COLOR_MASK_ALPHA && trans != GLPNG_ALPHA) {
    441441        png_set_strip_alpha(png);
    442442        color &= ~PNG_COLOR_MASK_ALPHA;
    443443    }
    444444
    445     if (!(PalettedTextures && mipmap >= 0 && trans == PNG_SOLID))
     445    if (!(PalettedTextures && mipmap >= 0 && trans == GLPNG_SOLID))
    446446        if (color == PNG_COLOR_TYPE_PALETTE)
    447447            png_set_expand(png);
    448448
     
    493493        glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    494494
    495495#ifdef SUPPORTS_PALETTE_EXT
    496         if (PalettedTextures && mipmap >= 0 && trans == PNG_SOLID && color == PNG_COLOR_TYPE_PALETTE) {
     496        if (PalettedTextures && mipmap >= 0 && trans == GLPNG_SOLID && color == PNG_COLOR_TYPE_PALETTE) {
    497497            png_colorp pal;
    498498            int cols;
    499499            GLint intf;
     
    517517        }
    518518        else
    519519#endif
    520             if (trans == PNG_SOLID || trans == PNG_ALPHA || color == PNG_COLOR_TYPE_RGB_ALPHA || color == PNG_COLOR_TYPE_GRAY_ALPHA) {
     520            if (trans == GLPNG_SOLID || trans == GLPNG_ALPHA || color == PNG_COLOR_TYPE_RGB_ALPHA || color == PNG_COLOR_TYPE_GRAY_ALPHA) {
    521521                GLenum glformat;
    522522                GLint glcomponent;
    523523
     
    542542                        return 0;
    543543                }
    544544
    545                 if (mipmap == PNG_BUILDMIPMAPS)
     545                if (mipmap == GLPNG_BUILDMIPMAPS)
    546546                    Build2DMipmaps(glcomponent, width, height, glformat, data, 1);
    547                 else if (mipmap == PNG_SIMPLEMIPMAPS)
     547                else if (mipmap == GLPNG_SIMPLEMIPMAPS)
    548548                    Build2DMipmaps(glcomponent, width, height, glformat, data, 0);
    549549                else
    550550                    glTexImage2D(GL_TEXTURE_2D, mipmap, glcomponent, width, height, 0, glformat, GL_UNSIGNED_BYTE, data);
     
    574574#define ALPHA *q
    575575
    576576                switch (trans) {
    577                     case PNG_CALLBACK:
     577                    case GLPNG_CALLBACK:
    578578                        FORSTART
    579579                            ALPHA = AlphaCallback((unsigned char) r, (unsigned char) g, (unsigned char) b);
    580580                        FOREND
    581581                            break;
    582582
    583                     case PNG_STENCIL:
     583                    case GLPNG_STENCIL:
    584584                        FORSTART
    585585                            if (r == StencilRed && g == StencilGreen && b == StencilBlue)
    586586                                ALPHA = 0;
     
    589589                        FOREND
    590590                            break;
    591591
    592                     case PNG_BLEND1:
     592                    case GLPNG_BLEND1:
    593593                        FORSTART
    594594                            a = r+g+b;
    595595                        if (a > 255) ALPHA = 255; else ALPHA = a;
    596596                        FOREND
    597597                            break;
    598598
    599                     case PNG_BLEND2:
     599                    case GLPNG_BLEND2:
    600600                        FORSTART
    601601                            a = r+g+b;
    602602                        if (a > 255*2) ALPHA = 255; else ALPHA = a/2;
    603603                        FOREND
    604604                            break;
    605605
    606                     case PNG_BLEND3:
     606                    case GLPNG_BLEND3:
    607607                        FORSTART
    608608                            ALPHA = (r+g+b)/3;
    609609                        FOREND
    610610                            break;
    611611
    612                     case PNG_BLEND4:
     612                    case GLPNG_BLEND4:
    613613                        FORSTART
    614614                            a = r*r+g*g+b*b;
    615615                        if (a > 255) ALPHA = 255; else ALPHA = a;
    616616                        FOREND
    617617                            break;
    618618
    619                     case PNG_BLEND5:
     619                    case GLPNG_BLEND5:
    620620                        FORSTART
    621621                            a = r*r+g*g+b*b;
    622622                        if (a > 255*2) ALPHA = 255; else ALPHA = a/2;
    623623                        FOREND
    624624                            break;
    625625
    626                     case PNG_BLEND6:
     626                    case GLPNG_BLEND6:
    627627                        FORSTART
    628628                            a = r*r+g*g+b*b;
    629629                        if (a > 255*3) ALPHA = 255; else ALPHA = a/3;
    630630                        FOREND
    631631                            break;
    632632
    633                     case PNG_BLEND7:
     633                    case GLPNG_BLEND7:
    634634                        FORSTART
    635635                            a = r*r+g*g+b*b;
    636636                        if (a > 255*255) ALPHA = 255; else ALPHA = (int) sqrt(a);
     
    642642#undef FOREND
    643643#undef ALPHA
    644644
    645                 if (mipmap == PNG_BUILDMIPMAPS)
     645                if (mipmap == GLPNG_BUILDMIPMAPS)
    646646                    Build2DMipmaps(4, width, height, GL_RGBA, data2, 1);
    647                 else if (mipmap == PNG_SIMPLEMIPMAPS)
     647                else if (mipmap == GLPNG_SIMPLEMIPMAPS)
    648648                    Build2DMipmaps(4, width, height, GL_RGBA, data2, 0);
    649649                else
    650650                    glTexImage2D(GL_TEXTURE_2D, mipmap, 4, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data2);