improve sw renderer
This commit is contained in:
parent
415d424057
commit
39ee0fefb7
89 changed files with 9380 additions and 2307 deletions
|
|
@ -6,6 +6,7 @@
|
|||
#include "pxl8_ase.h"
|
||||
#include "pxl8_log.h"
|
||||
#include "pxl8_macros.h"
|
||||
#include "pxl8_mem.h"
|
||||
#include "pxl8_tilesheet.h"
|
||||
|
||||
struct pxl8_tilesheet {
|
||||
|
|
@ -58,7 +59,7 @@ static pxl8_tile_chunk* pxl8_get_or_create_chunk(pxl8_tilemap_layer* layer, u32
|
|||
if (idx >= layer->chunks_wide * layer->chunks_high) return NULL;
|
||||
|
||||
if (!layer->chunks[idx]) {
|
||||
layer->chunks[idx] = calloc(1, sizeof(pxl8_tile_chunk));
|
||||
layer->chunks[idx] = pxl8_calloc(1, sizeof(pxl8_tile_chunk));
|
||||
if (!layer->chunks[idx]) return NULL;
|
||||
|
||||
layer->chunks[idx]->chunk_x = chunk_x;
|
||||
|
|
@ -75,7 +76,7 @@ pxl8_tilemap* pxl8_tilemap_create(u32 width, u32 height, u32 tile_size) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
pxl8_tilemap* tilemap = calloc(1, sizeof(pxl8_tilemap));
|
||||
pxl8_tilemap* tilemap = pxl8_calloc(1, sizeof(pxl8_tilemap));
|
||||
if (!tilemap) return NULL;
|
||||
|
||||
tilemap->width = width;
|
||||
|
|
@ -85,7 +86,7 @@ pxl8_tilemap* pxl8_tilemap_create(u32 width, u32 height, u32 tile_size) {
|
|||
|
||||
tilemap->tilesheet = pxl8_tilesheet_create(tilemap->tile_size);
|
||||
if (!tilemap->tilesheet) {
|
||||
free(tilemap);
|
||||
pxl8_free(tilemap);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
@ -103,13 +104,13 @@ pxl8_tilemap* pxl8_tilemap_create(u32 width, u32 height, u32 tile_size) {
|
|||
layer->visible = (i == 0);
|
||||
layer->opacity = 255;
|
||||
|
||||
layer->chunks = calloc(layer->chunk_count, sizeof(pxl8_tile_chunk*));
|
||||
layer->chunks = pxl8_calloc(layer->chunk_count, sizeof(pxl8_tile_chunk*));
|
||||
if (!layer->chunks) {
|
||||
for (u32 j = 0; j < i; j++) {
|
||||
free(tilemap->layers[j].chunks);
|
||||
pxl8_free(tilemap->layers[j].chunks);
|
||||
}
|
||||
if (tilemap->tilesheet) pxl8_tilesheet_destroy(tilemap->tilesheet);
|
||||
free(tilemap);
|
||||
pxl8_free(tilemap);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
|
@ -125,17 +126,17 @@ void pxl8_tilemap_destroy(pxl8_tilemap* tilemap) {
|
|||
if (layer->chunks) {
|
||||
for (u32 j = 0; j < layer->chunk_count; j++) {
|
||||
if (layer->chunks[j]) {
|
||||
free(layer->chunks[j]);
|
||||
pxl8_free(layer->chunks[j]);
|
||||
}
|
||||
}
|
||||
free(layer->chunks);
|
||||
pxl8_free(layer->chunks);
|
||||
}
|
||||
}
|
||||
|
||||
if (tilemap->tilesheet) pxl8_tilesheet_unref(tilemap->tilesheet);
|
||||
if (tilemap->tile_user_data) free(tilemap->tile_user_data);
|
||||
if (tilemap->tile_user_data) pxl8_free(tilemap->tile_user_data);
|
||||
|
||||
free(tilemap);
|
||||
pxl8_free(tilemap);
|
||||
}
|
||||
|
||||
u32 pxl8_tilemap_get_width(const pxl8_tilemap* tilemap) {
|
||||
|
|
@ -155,7 +156,7 @@ void pxl8_tilemap_set_tile_user_data(pxl8_tilemap* tilemap, u16 tile_id, void* u
|
|||
|
||||
if (tile_id >= tilemap->tile_user_data_capacity) {
|
||||
u32 new_capacity = tile_id + 64;
|
||||
void** new_data = realloc(tilemap->tile_user_data, new_capacity * sizeof(void*));
|
||||
void** new_data = pxl8_realloc(tilemap->tile_user_data, new_capacity * sizeof(void*));
|
||||
if (!new_data) return;
|
||||
|
||||
for (u32 i = tilemap->tile_user_data_capacity; i < new_capacity; i++) {
|
||||
|
|
@ -478,7 +479,7 @@ void pxl8_tilemap_compress(pxl8_tilemap* tilemap) {
|
|||
}
|
||||
|
||||
if (!has_tiles) {
|
||||
free(chunk);
|
||||
pxl8_free(chunk);
|
||||
layer->chunks[j] = NULL;
|
||||
layer->allocated_chunks--;
|
||||
} else {
|
||||
|
|
@ -535,8 +536,8 @@ pxl8_result pxl8_tilemap_load_ase(pxl8_tilemap* tilemap, const char* filepath, u
|
|||
u32 tilesheet_width = tiles_per_row * tilemap->tile_size;
|
||||
u32 tilesheet_height = tilesheet_rows * tilemap->tile_size;
|
||||
|
||||
if (tilemap->tilesheet->data) free(tilemap->tilesheet->data);
|
||||
tilemap->tilesheet->data = calloc(tilesheet_width * tilesheet_height, 1);
|
||||
if (tilemap->tilesheet->data) pxl8_free(tilemap->tilesheet->data);
|
||||
tilemap->tilesheet->data = pxl8_calloc(tilesheet_width * tilesheet_height, 1);
|
||||
if (!tilemap->tilesheet->data) {
|
||||
pxl8_ase_destroy(&ase_file);
|
||||
return PXL8_ERROR_OUT_OF_MEMORY;
|
||||
|
|
@ -548,8 +549,8 @@ pxl8_result pxl8_tilemap_load_ase(pxl8_tilemap* tilemap, const char* filepath, u
|
|||
tilemap->tilesheet->total_tiles = tileset->tile_count;
|
||||
tilemap->tilesheet->pixel_mode = PXL8_PIXEL_INDEXED;
|
||||
|
||||
if (tilemap->tilesheet->tile_valid) free(tilemap->tilesheet->tile_valid);
|
||||
tilemap->tilesheet->tile_valid = calloc(tileset->tile_count + 1, sizeof(bool));
|
||||
if (tilemap->tilesheet->tile_valid) pxl8_free(tilemap->tilesheet->tile_valid);
|
||||
tilemap->tilesheet->tile_valid = pxl8_calloc(tileset->tile_count + 1, sizeof(bool));
|
||||
|
||||
for (u32 i = 0; i < tileset->tile_count; i++) {
|
||||
u32 sheet_row = i / tiles_per_row;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue