- [NEW] Augmentat el màxim de textures a 100.

- [NEW] Camp "name" per a les textures.
- [NEW] Si s'intenta carregar un gif que ja està en memòria, se torna el que està en memòria.
This commit is contained in:
2025-06-02 12:30:58 +02:00
parent 8e855fa2c1
commit adcc44ddab

View File

@@ -7,7 +7,7 @@
//#include "SDL2/SDL_mixer.h"
#include "jail_audio.h"
#define MAX_TEXTURES 10
#define MAX_TEXTURES 100
#ifdef MACOS_BUNDLE
#include <libgen.h>
@@ -18,7 +18,8 @@
#pragma pack(1)
struct surface_t {
uint8_t *p;
char *name {nullptr};
uint8_t *p {nullptr};
uint16_t w, h;
uint32_t size;
};
@@ -173,6 +174,8 @@ void reinit() {
for (int i=1; i<MAX_TEXTURES; ++i) {
if (surfaces[i].p != NULL) free(surfaces[i].p);
surfaces[i].p = NULL;
if (surfaces[i].name != NULL) free(surfaces[i].name);
surfaces[i].name = NULL;
}
for (int i=0;i<256;++i) ds::draw_palette[i]=i;
if (file!=NULL) fclose(file);
@@ -202,6 +205,7 @@ uint8_t newsurf(int w, int h) {
int i = 0;
while (i<MAX_TEXTURES && surfaces[i].p != NULL) ++i;
//[TODO] Gestionar el cas en que no queden surfaces lliures
surfaces[i].name = nullptr;
surfaces[i].w = w;
surfaces[i].h = h;
surfaces[i].size = w*h;
@@ -210,6 +214,9 @@ uint8_t newsurf(int w, int h) {
}
uint8_t loadsurf(const char* filename) {
// Si el gif ja s'ha carregat en una textura, tornem eixa textura
for (int i=0; i<MAX_TEXTURES; ++i) if (strcmp(surfaces[i].name, filename)==0) return i;
int i = 0;
while (i<MAX_TEXTURES && surfaces[i].p != NULL) ++i;
//[TODO] Gestionar el cas en que no queden surfaces lliures
@@ -218,6 +225,8 @@ uint8_t loadsurf(const char* filename) {
uint8_t *buffer = (uint8_t*)file_getfilebuffer(filename, size);
surfaces[i].p = LoadGif(buffer, &surfaces[i].w, &surfaces[i].h);
surfaces[i].size = surfaces[i].w*surfaces[i].h;
surfaces[i].name = (char*)malloc(strlen(filename)+1);
strcpy(surfaces[i].name, filename);
free(buffer);
return i;
@@ -236,6 +245,8 @@ void savesurf(uint8_t surface, const char* filename, uint8_t *pal, uint8_t color
void freesurf(uint8_t surface) {
if (surfaces[surface].p != NULL) free(surfaces[surface].p);
surfaces[surface].p = NULL;
if (surfaces[surface].name != NULL) free(surfaces[surface].name);
surfaces[surface].name = NULL;
}
int surfw(uint8_t surface) {