comparison libmlk-core/core/image.c @ 243:71b3b7036de7

misc: lot of cleanups, - prefix libraries with libmlk, - move assets from source directories closes #2520, - prefix header guards closes #2519
author David Demelier <markand@malikania.fr>
date Sat, 28 Nov 2020 22:37:30 +0100
parents libcore/core/image.c@eb0a7ab71023
children 196264679079
comparison
equal deleted inserted replaced
242:4c24604efcab 243:71b3b7036de7
1 /*
2 * image.c -- basic image management
3 *
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
5 *
6 * Permission to use, copy, modify, and/or distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19 #include <assert.h>
20 #include <stdbool.h>
21
22 #include <SDL_image.h>
23
24 #include "error.h"
25 #include "texture.h"
26 #include "window.h"
27 #include "window_p.h"
28
29 static void
30 dimensions(struct texture *tex)
31 {
32 int w, h;
33
34 if (SDL_QueryTexture(tex->handle, NULL, NULL, &w, &h) < 0)
35 tex->w = tex->h = 0;
36 else {
37 tex->w = w;
38 tex->h = h;
39 }
40 }
41
42 bool
43 image_open(struct texture *tex, const char *path)
44 {
45 assert(tex);
46 assert(path);
47
48 if (!(tex->handle = IMG_LoadTexture(RENDERER(), path)))
49 return errorf("%s", SDL_GetError());
50
51 dimensions(tex);
52
53 return true;
54 }
55
56 bool
57 image_openmem(struct texture *tex, const void *buffer, size_t size)
58 {
59 assert(buffer);
60
61 SDL_RWops *ops = SDL_RWFromConstMem(buffer, size);
62
63 if (!ops || !(tex->handle = IMG_LoadTexture_RW(RENDERER(), ops, true)))
64 return errorf("%s", SDL_GetError());
65
66 dimensions(tex);
67
68 return true;
69 }