// Apple's annoying non-standard GL include location #if defined(__APPLE__) || defined(MACOSX) #include #else #include #endif #include #include #include #include void loadIMG(std::string filename, int texUnit) { // open file FILE *fp = fopen(filename.c_str(), "rb"); if (!fp) { perror(filename.c_str()); return; } // get info png_structp imgp = png_create_read_struct(PNG_LIBPNG_VER_STRING,0,0,0); png_infop infop = png_create_info_struct(imgp); png_init_io(imgp, fp); png_read_info(imgp, infop); int w = png_get_image_width(imgp,infop); int h = png_get_image_height(imgp,infop); // figure out number of channels (or transform into something we // can handle int ctype = png_get_color_type(imgp,infop); if (ctype==PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(imgp); int c = png_get_channels(imgp, infop); // allocate single image block and row pointers into it // row pointers include flip from PNG bottom origin to GL top origin std::auto_ptr imdata(new png_byte[w*h*c]); std::auto_ptr imrow(new png_byte*[h]); for(int i=0; i imdata(new png_byte[w*h*4]); std::auto_ptr imrow(new png_byte*[h]); for(int i=0; i