/* * Copyright (C) 2013 Patrick "P. J." McDermott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program. If not, see * . */ #include #include #include #include "../logging.h" #include "image.h" #include "resource.h" struct resource_table img_res; struct image * img_png_get(const char *path) { SDL_RWops *rwops; struct image *img; img = (struct image *) resource_get(&img_res, path); if (img != NULL) { resource_use((struct resource *) img); return img; } img = resource_alloc(path, sizeof(*img)); rwops = SDL_RWFromFile(path, "rb"); img->image = IMG_LoadPNG_RW(rwops); if (!img->image) { err(1, "Failed to load image \"%s\" (%s)", path, IMG_GetError()); } #ifdef DEBUG_PALETTES { SDL_Palette *pal; int col_i; debug("Palette for image \"%s\"\n", path); pal = img->image->format->palette; for (col_i = 0; col_i < pal->ncolors; ++col_i) { debug(" Color %3.3d: 0x%2.2x%2.2x%2.2x", col_i, pal->colors[col_i].r, pal->colors[col_i].g, pal->colors[col_i].b); } } #endif resource_use((struct resource *) img); resource_add(&img_res, path, (struct resource *) img); return img; } void img_png_free(struct image *image) { SDL_Surface *data; if (image == NULL) { return; } data = image->image; if (resource_free(&img_res, (struct resource *) image)) { SDL_FreeSurface(data); } }