terom@18: #ifndef PNGTILE_TILE_H terom@18: #define PNGTILE_TILE_H terom@18: terom@18: /** terom@56: * @file terom@18: * Generating PNG tiles from a cache terom@18: */ terom@56: terom@56: struct pt_tile; terom@56: terom@18: #include "pngtile.h" terom@18: #include "cache.h" terom@18: terom@18: /** Types of tile output */ terom@18: enum pt_tile_output { terom@18: PT_TILE_OUT_FILE, terom@18: PT_TILE_OUT_MEM, terom@18: }; terom@18: terom@18: /** Initial size of out.mem.base, 16k */ terom@18: #define PT_TILE_BUF_SIZE (16 * 1024) terom@18: terom@18: terom@18: terom@18: /** Per-tile-render state */ terom@18: struct pt_tile { terom@19: /** Cache to render from */ terom@19: struct pt_cache *cache; terom@19: terom@18: /** Render spec */ terom@18: struct pt_tile_info info; terom@18: terom@18: /** Output type */ terom@18: enum pt_tile_output out_type; terom@18: terom@18: union { terom@18: /** Output file */ terom@18: FILE *file; terom@18: terom@18: /** Output buffer */ terom@18: struct pt_tile_mem { terom@18: char *base; terom@18: size_t off, len; terom@18: } mem; terom@18: } out; terom@18: }; terom@18: terom@18: /** terom@56: * Write to the tile's output buffer terom@56: */ terom@56: int pt_tile_mem_write (struct pt_tile_mem *buf, void *data, size_t len); terom@56: terom@56: terom@56: /** terom@19: * Alloc a new pt_tile, which must be initialized using pt_tile_init_* terom@19: */ terom@19: int pt_tile_new (struct pt_tile **tile_ptr); terom@19: terom@19: /** terom@18: * Initialize to render with given params, writing output to given FILE* terom@18: */ terom@19: int pt_tile_init_file (struct pt_tile *tile, struct pt_cache *cache, const struct pt_tile_info *info, FILE *out); terom@18: terom@18: /** terom@18: * Initialize to render with given params, writing output to a memory buffer terom@18: */ terom@19: int pt_tile_init_mem (struct pt_tile *tile, struct pt_cache *cache, const struct pt_tile_info *info); terom@18: terom@18: /** terom@18: * Render PNG data from given cache according to parameters given to pt_tile_init_* terom@18: */ terom@19: int pt_tile_render (struct pt_tile *tile); terom@18: terom@18: /** terom@18: * Abort any failed render process, cleaning up. terom@18: */ terom@18: void pt_tile_abort (struct pt_tile *tile); terom@18: terom@19: /** terom@19: * Destroy given pt_tile, aborting it and freeing it terom@19: */ terom@19: void pt_tile_destroy (struct pt_tile *tile); terom@19: terom@18: #endif