Put atlas entries into buckets.
This commit is contained in:
parent
72efd1048b
commit
dbcd2debc3
|
@ -59,6 +59,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#define MAX_FILENAME_LENGTH 1024
|
#define MAX_FILENAME_LENGTH 1024
|
||||||
|
|
||||||
#define NUM_TEXTURE_BUCKETS 32
|
#define NUM_TEXTURE_BUCKETS 32
|
||||||
|
#define NUM_ATLAS_BUCKETS 64
|
||||||
|
|
||||||
#define MAP_WIDTH 200
|
#define MAP_WIDTH 200
|
||||||
#define MAP_HEIGHT 200
|
#define MAP_HEIGHT 200
|
||||||
|
|
|
@ -20,31 +20,25 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
#include "atlas.h"
|
#include "atlas.h"
|
||||||
|
|
||||||
static void loadAtlasTexture(void);
|
|
||||||
static void loadAtlasData(void);
|
static void loadAtlasData(void);
|
||||||
|
|
||||||
static Atlas atlasHead;
|
static Atlas atlases[NUM_ATLAS_BUCKETS];
|
||||||
static Atlas *atlasTail;
|
|
||||||
static Texture *atlasTexture;
|
|
||||||
static int atlasSize;
|
|
||||||
|
|
||||||
void initAtlas(void)
|
void initAtlas(void)
|
||||||
{
|
{
|
||||||
memset(&atlasHead, 0, sizeof(Atlas));
|
memset(&atlases, 0, sizeof(Atlas) * NUM_ATLAS_BUCKETS);
|
||||||
atlasTail = &atlasHead;
|
|
||||||
|
|
||||||
loadAtlasTexture();
|
|
||||||
|
|
||||||
loadAtlasData();
|
loadAtlasData();
|
||||||
|
|
||||||
dev.debug = dev.showFPS = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Atlas *getImageFromAtlas(char *filename)
|
Atlas *getImageFromAtlas(char *filename)
|
||||||
{
|
{
|
||||||
Atlas *a;
|
Atlas *a;
|
||||||
|
unsigned long i;
|
||||||
|
|
||||||
|
i = hashcode(filename) % NUM_ATLAS_BUCKETS;
|
||||||
|
|
||||||
for (a = atlasHead.next ; a != NULL ; a = a->next)
|
for (a = atlases[i].next ; a != NULL ; a = a->next)
|
||||||
{
|
{
|
||||||
if (strcmp(a->filename, filename) == 0)
|
if (strcmp(a->filename, filename) == 0)
|
||||||
{
|
{
|
||||||
|
@ -55,19 +49,13 @@ Atlas *getImageFromAtlas(char *filename)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void loadAtlasTexture(void)
|
|
||||||
{
|
|
||||||
atlasTexture = getTexture("gfx/atlas/atlas.png");
|
|
||||||
|
|
||||||
SDL_QueryTexture(atlasTexture->texture, NULL, NULL, &atlasSize, &atlasSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void loadAtlasData(void)
|
static void loadAtlasData(void)
|
||||||
{
|
{
|
||||||
Atlas *atlas;
|
Atlas *atlas, *a;
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
cJSON *root, *node;
|
cJSON *root, *node;
|
||||||
char *text, *filename;
|
char *text, *filename;
|
||||||
|
unsigned long i;
|
||||||
|
|
||||||
text = readFile("data/atlas/atlas.json");
|
text = readFile("data/atlas/atlas.json");
|
||||||
|
|
||||||
|
@ -80,11 +68,20 @@ static void loadAtlasData(void)
|
||||||
y = cJSON_GetObjectItem(node, "y")->valueint;
|
y = cJSON_GetObjectItem(node, "y")->valueint;
|
||||||
w = cJSON_GetObjectItem(node, "w")->valueint;
|
w = cJSON_GetObjectItem(node, "w")->valueint;
|
||||||
h = cJSON_GetObjectItem(node, "h")->valueint;
|
h = cJSON_GetObjectItem(node, "h")->valueint;
|
||||||
|
|
||||||
|
i = hashcode(filename) % NUM_ATLAS_BUCKETS;
|
||||||
|
|
||||||
|
a = &atlases[i];
|
||||||
|
|
||||||
|
/* horrible bit to look for the tail */
|
||||||
|
while (a->next)
|
||||||
|
{
|
||||||
|
a = a->next;
|
||||||
|
}
|
||||||
|
|
||||||
atlas = malloc(sizeof(Atlas));
|
atlas = malloc(sizeof(Atlas));
|
||||||
memset(atlas, 0, sizeof(Atlas));
|
memset(atlas, 0, sizeof(Atlas));
|
||||||
atlasTail->next = atlas;
|
a->next = atlas;
|
||||||
atlasTail = atlas;
|
|
||||||
|
|
||||||
STRNCPY(atlas->filename, filename, MAX_FILENAME_LENGTH);
|
STRNCPY(atlas->filename, filename, MAX_FILENAME_LENGTH);
|
||||||
atlas->rect.x = x;
|
atlas->rect.x = x;
|
||||||
|
|
|
@ -23,5 +23,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
extern Texture *getTexture(const char *filename);
|
extern Texture *getTexture(const char *filename);
|
||||||
extern char *readFile(const char *filename);
|
extern char *readFile(const char *filename);
|
||||||
|
extern unsigned long hashcode(const char *str);
|
||||||
|
|
||||||
extern Dev dev;
|
extern Dev dev;
|
||||||
|
|
Loading…
Reference in New Issue