aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2022-12-27 13:09:55 +0100
committerkdx <kikoodx@paranoici.org>2022-12-27 13:09:55 +0100
commitafa7e90035c6736ebe5dd3e47774c75c41893516 (patch)
tree2540c71c12f48edcb5be09cb570f47f34f140501
parentecaf8b65537214b738e08a10c0ffb4055672fbd1 (diff)
downloadlzr-afa7e90035c6736ebe5dd3e47774c75c41893516.tar.gz
simpler image system
-rw-r--r--demo.c8
-rw-r--r--lzr.c14
-rw-r--r--lzr.h1
3 files changed, 16 insertions, 7 deletions
diff --git a/demo.c b/demo.c
index 8e5c70a..aef633f 100644
--- a/demo.c
+++ b/demo.c
@@ -10,8 +10,6 @@ int main(void)
400, 224, 60, 16, "LZR demo", false, SDL_BLENDMODE_MUL};
if (LZR_Init(cfg))
return 1;
- LZR_ImageLoad("coucou.bmp");
- LZR_ImageLoad("tset.bmp");
float darkness = 0.0f;
float dark_dir = 1.0f;
int x = 0;
@@ -48,11 +46,11 @@ int main(void)
LZR_DrawSetColor(0.9f, 0.9f, 0.8f);
LZR_DrawClear();
LZR_DrawSetColor(1.0f, 1.0f, 1.0f);
- LZR_DrawTile(1, 2, 2, 2, 0.0, 0);
- LZR_DrawTile(1, 4, 22, 2, 0.0, 0);
+ LZR_DrawTile(LZR_IMAGE(tset.bmp), 2, 2, 2, 0.0, 0);
+ LZR_DrawTile(LZR_IMAGE(tset.bmp), 4, 22, 2, 0.0, 0);
const float shade = 0.9 * (0.5f + darkness);
LZR_DrawSetColor(shade, shade, 0.0f);
- LZR_DrawImageEx(0, x, y, stg);
+ LZR_DrawImageEx(LZR_IMAGE(coucou.bmp), x, y, stg);
LZR_DrawCircle(false, x, y, 100);
LZR_DrawEnd();
}
diff --git a/lzr.c b/lzr.c
index d1483ca..15c079b 100644
--- a/lzr.c
+++ b/lzr.c
@@ -30,6 +30,7 @@ static bool should_quit = false;
static struct {
SDL_Texture *tex;
int width, height;
+ char *path;
} images[LZR_MAX_IMAGES] = {0};
static unsigned int color[3] = {0};
static unsigned int map[LZR_BUTTON_COUNT] = {
@@ -242,12 +243,17 @@ void LZR_Quit(void)
Mix_CloseAudio();
Mix_Quit();
#endif
- for (int i = 0; i < LZR_MAX_IMAGES; i++)
+ for (int i = 0; i < LZR_MAX_IMAGES; i++) {
if (images[i].tex != NULL) {
SDL_DestroyTexture(images[i].tex);
images[i].tex = NULL;
SDL_Log("destroyed image %d", i);
}
+ if (images[i].path != NULL) {
+ free(images[i].path);
+ images[i].path = NULL;
+ }
+ }
if (points != NULL) {
free(points);
points = NULL;
@@ -302,9 +308,12 @@ char *LZR_PathPrefix(const char *path)
int LZR_ImageLoad(const char *path)
{
int i;
- for (i = 0; i < LZR_MAX_IMAGES; i++)
+ for (i = 0; i < LZR_MAX_IMAGES; i++) {
+ if (images[i].path != NULL && strcmp(images[i].path, path) == 0)
+ return i;
if (images[i].tex == NULL)
break;
+ }
if (i >= LZR_MAX_IMAGES) {
SDL_Log("reached image limit (%d)", LZR_MAX_IMAGES);
return -1;
@@ -340,6 +349,7 @@ int LZR_ImageLoad(const char *path)
SDL_Log("%s", SDL_GetError());
return -1;
}
+ images[i].path = _strdup(path);
return i;
}
diff --git a/lzr.h b/lzr.h
index fb0d594..04e148f 100644
--- a/lzr.h
+++ b/lzr.h
@@ -10,6 +10,7 @@
#define LZR_MAX_IMAGES 32
#define LZR_MAX_SOUNDS 64
#define LZR_BUTTON(btn) LZR_ButtonDown(LZR_BUTTON_##btn)
+#define LZR_IMAGE(img) LZR_ImageLoad(#img)
typedef struct LZR_Config {
unsigned int display_width;