-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsprite.h
More file actions
73 lines (59 loc) · 1.65 KB
/
sprite.h
File metadata and controls
73 lines (59 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#ifndef SPRITE_H
#define SPRITE_H
#include <raylib.h>
#include "format.h"
#include "array.h"
/* (All sprites are the same!!!) */
#define SPRITE_LENGTH 128
#define SPRITE_MIPMAPS 1
#define SPRITE_FORMAT PIXELFORMAT_UNCOMPRESSED_R8G8B8
#define SPRITE_SIZE GetPixelDataSize(SPRITE_LENGTH, SPRITE_LENGTH, SPRITE_FORMAT)
#define format_Sprite \
format_fixed_list(SPRITE_SIZE, \
format_obj(char) \
)
typedef struct Sprite {
void *pixels;
} Sprite;
/* Returns the image of `sprite`. */
static Image sprite_image(Sprite sprite) {
return (Image) {
.width = SPRITE_LENGTH,
.height = SPRITE_LENGTH,
.mipmaps = SPRITE_MIPMAPS,
.format = SPRITE_FORMAT,
.data = sprite.pixels
};
}
/* Creates a sprite from `image`. */
static Sprite sprite_new_raw(Image *im) {
ImageResize(im, SPRITE_LENGTH, SPRITE_LENGTH);
ImageFormat(im, SPRITE_FORMAT);
Sprite sprite = {
.pixels = malloc(SPRITE_SIZE)
};
memcpy(sprite.pixels, im->data, SPRITE_SIZE);
UnloadImage(*im);
return sprite;
}
/* Creates a sprite from image in `filename`. */
static Sprite sprite_new(const char *filename) {
Image im = LoadImage(filename);
if (im.data == NULL) {
return (Sprite) { 0 };
}
return sprite_new_raw(&im);
}
/* Loads texture from `pixels`. */
static Texture sprite_load(Sprite sprite) {
return LoadTextureFromImage(sprite_image(sprite));
}
/* Exports `sprite` to `filename`. */
static bool sprite_export(Sprite sprite, char *filename) {
return ExportImage(sprite_image(sprite), filename);
}
/* Duh! */
static void sprite_free(Sprite sprite) {
free(sprite.pixels);
}
#endif