diff --git descriptor/writer/image_writer.cc descriptor/writer/image_writer.cc index 4187e813c..ba2eeb6db 100644 --- descriptor/writer/image_writer.cc +++ descriptor/writer/image_writer.cc @@ -13,7 +13,7 @@ #include "obj_pak_exception.h" #include "../image.h" #include "../../macros.h" -#include "../../utils/dr_rdpng.h" +#include "../../makeobj/dr_rdpng.h" #include "../../utils/simstring.h" #include "../../simdebug.h" diff --git makeobj/Makefile makeobj/Makefile index 1d3f644d6..8f7566d30 100644 --- makeobj/Makefile +++ makeobj/Makefile @@ -105,6 +105,7 @@ CXXFLAGS += -Wall -Wextra -Wcast-qual -Wpointer-arith -Wcast-align $(OS_INC) $(O # VARIANT_SOURCES contains those which need different .o files for makeobj and simutrans. # At the moment they're all treated identically, of course. SOLO_SOURCES += makeobj.cc +SOLO_SOURCES += dr_rdpng.cc SOLO_SOURCES += ../descriptor/writer/bridge_writer.cc SOLO_SOURCES += ../descriptor/writer/building_writer.cc SOLO_SOURCES += ../descriptor/writer/citycar_writer.cc @@ -133,7 +134,6 @@ SOLO_SOURCES += ../descriptor/writer/vehicle_writer.cc SOLO_SOURCES += ../descriptor/writer/way_writer.cc SOLO_SOURCES += ../descriptor/writer/way_obj_writer.cc SOLO_SOURCES += ../descriptor/writer/xref_writer.cc -SOLO_SOURCES += ../utils/dr_rdpng.cc SHARED_SOURCES += ../descriptor/image.cc SHARED_SOURCES += ../dataobj/freelist.cc SHARED_SOURCES += ../simdebug.cc diff --git makeobj/Makeobj.vcxproj makeobj/Makeobj.vcxproj index b0b699ea9..f2769a6c8 100644 --- makeobj/Makeobj.vcxproj +++ makeobj/Makeobj.vcxproj @@ -80,6 +80,7 @@ + @@ -113,12 +114,12 @@ - + @@ -194,7 +195,6 @@ - diff --git utils/dr_rdpng.cc makeobj/dr_rdpng.cc similarity index 68% rename from utils/dr_rdpng.cc rename to makeobj/dr_rdpng.cc index 254b9042c..77f7c60cb 100644 --- utils/dr_rdpng.cc +++ makeobj/dr_rdpng.cc @@ -3,25 +3,28 @@ * (see LICENSE.txt) */ +#include "dr_rdpng.h" + +#include "../simmem.h" +#include "../simdebug.h" + +#include +#include +#include +#include #include + #include -#include -#include -#include -#include // strerror + #ifndef _WIN32 +#include "../utils/simstring.h" + #include #include -#include "../utils/simstring.h" #endif -#include "../simmem.h" -#include "../simdebug.h" -#include "dr_rdpng.h" - -static std::string filename_; -static void read_png(unsigned char** block, unsigned* width, unsigned* height, FILE* file, const int base_img_size) +static void read_png(const char *filename, unsigned char **block, uint32 *width, uint32 *height, FILE *file, const sint32 base_img_size) { png_structp png_ptr; png_infop info_ptr; @@ -36,20 +39,20 @@ static void read_png(unsigned char** block, unsigned* width, unsigned* height, F png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL); if (png_ptr == NULL) { - dbg->error( "while loading PNG", "Could not create read struct in %s.", filename_.c_str() ); + dbg->error( "while loading PNG", "Could not create read struct in %s.", filename ); exit(1); } info_ptr = png_create_info_struct(png_ptr); if (info_ptr == NULL) { - dbg->error( "while loading PNG", "Could not create info struct in %s.", filename_.c_str() ); + dbg->error( "while loading PNG", "Could not create info struct in %s.", filename ); png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); exit(1); } #ifdef PNG_SETJMP_SUPPORTED if( setjmp(png_jmpbuf(png_ptr) )) { - dbg->error( "while loading PNG", "Fatal error in %s.", filename_.c_str() ); + dbg->error( "while loading PNG", "Fatal error in %s.", filename ); png_destroy_read_struct(&png_ptr, &info_ptr, (png_info**)0); exit(1); } @@ -69,7 +72,7 @@ static void read_png(unsigned char** block, unsigned* width, unsigned* height, F *height = heightpu32; if (*height % base_img_size != 0 || *width % base_img_size != 0) { - dbg->fatal( "while loading PNG", "Invalid image size in %s.", filename_.c_str() ); + dbg->fatal( "while loading PNG", "Invalid image size in %s.", filename ); exit(1); } @@ -142,11 +145,8 @@ static void read_png(unsigned char** block, unsigned* width, unsigned* height, F } -bool load_block(unsigned char** block, unsigned* width, unsigned* height, const char* fname, const int base_img_size) +bool load_block(unsigned char **block, uint32 *width, uint32 *height, const char *fname, const sint32 base_img_size) { - // remember the file name for better error messages. - filename_ = fname; - FILE* file = fopen(fname, "rb"); #ifndef _WIN32 @@ -177,7 +177,7 @@ bool load_block(unsigned char** block, unsigned* width, unsigned* height, const break; } struct dirent * ent = NULL; - while (ent = readdir(dir)) { + while ( (ent = readdir(dir)) != NULL ) { if (!STRICMP(ent->d_name, name.c_str())) { actual_path += ent->d_name; break; @@ -197,7 +197,7 @@ bool load_block(unsigned char** block, unsigned* width, unsigned* height, const #endif if (file) { - read_png(block, width, height, file, base_img_size); + read_png(fname, block, width, height, file, base_img_size); fclose(file); return true; } @@ -206,73 +206,3 @@ bool load_block(unsigned char** block, unsigned* width, unsigned* height, const return false; } } - - -// output either a 32 or 16 or 15 bitmap -int write_png( const char *file_name, unsigned char *data, int width, int height, int bit_depth ) -{ - // remember the file name for better error messages. - filename_ = file_name; - - png_structp png_ptr = NULL; - png_infop info_ptr = NULL; - FILE *fp = fopen(file_name, "wb"); - if (!fp) { - return 0; - } - - // init structures - png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!png_ptr) { - fclose( fp ); - return 0; - } - - info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) { - png_destroy_write_struct( &png_ptr, (png_infopp)NULL ); - fclose( fp ); - return 0; - } - -#ifdef PNG_SETJMP_SUPPORTED - if( setjmp( png_jmpbuf(png_ptr) ) ) { - dbg->error( "write_png", "fatal error"); - png_destroy_write_struct(&png_ptr, &info_ptr); - exit(1); - } -#endif - - // assign file - png_init_io(png_ptr, fp); - -#if PNG_LIBPNG_VER_MAJOR<=1 && PNG_LIBPNG_VER_MINOR<5 - /* set the zlib compression level */ - png_set_compression_level( png_ptr, Z_BEST_COMPRESSION ); -#endif - - // output header - png_set_IHDR( png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_INTERLACE_NONE, PNG_FILTER_TYPE_DEFAULT ); - png_write_info(png_ptr, info_ptr); - - if( bit_depth==32 ) { - // write image data - int i; - png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE); - for( i=0; ifatal( "write_png", "32 bit not supported!" ); - exit(0); - } - - // free all - png_write_end(png_ptr, info_ptr); - png_destroy_write_struct(&png_ptr, &info_ptr); - - fclose( fp ); - return 1; -} diff --git makeobj/dr_rdpng.h makeobj/dr_rdpng.h new file mode 100644 index 000000000..2ba263494 --- /dev/null +++ makeobj/dr_rdpng.h @@ -0,0 +1,16 @@ +/* + * This file is part of the Simutrans project under the Artistic License. + * (see LICENSE.txt) + */ + +#ifndef MAKEOBJ_DR_RDPNG_H +#define MAKEOBJ_DR_RDPNG_H + + +#include "../simtypes.h" + + +bool load_block(unsigned char **block, uint32 *width, uint32 *height, const char *fname, const sint32 base_img_size); + + +#endif diff --git utils/dr_rdpng.h utils/dr_rdpng.h deleted file mode 100644 index 7c935f6a0..000000000 --- utils/dr_rdpng.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of the Simutrans project under the Artistic License. - * (see LICENSE.txt) - */ - -#ifndef UTILS_DR_RDPNG_H -#define UTILS_DR_RDPNG_H - - -#ifdef __cplusplus -extern "C" { -#endif - -bool load_block(unsigned char** block, unsigned* width, unsigned* height, const char* fname, const int base_img_size); - -// output either a 32 (or 16 or 15 bitmap in future ...) -int write_png( const char *file_name, unsigned char *data, int width, int height, int bit_depth ); - -#ifdef __cplusplus -} -#endif - -#endif