- [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:
15
mini.cpp
15
mini.cpp
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user