2025-10-17 17:54:33 -05:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "pxl8_types.h"
|
|
|
|
|
|
|
|
|
|
typedef struct pxl8_atlas pxl8_atlas;
|
|
|
|
|
|
|
|
|
|
typedef struct pxl8_atlas_entry {
|
|
|
|
|
bool active;
|
2026-02-02 17:48:25 -06:00
|
|
|
i32 h, w, x, y;
|
|
|
|
|
u8 log2_h, log2_w;
|
2025-10-17 17:54:33 -05:00
|
|
|
u32 texture_id;
|
2026-01-21 23:19:50 -06:00
|
|
|
u32 tiled_base;
|
2025-10-17 17:54:33 -05:00
|
|
|
} pxl8_atlas_entry;
|
|
|
|
|
|
2026-01-21 23:19:50 -06:00
|
|
|
static inline u32 pxl8_tile_addr(u32 u, u32 v, u8 log2_w) {
|
|
|
|
|
u32 tile_y = v >> 3;
|
|
|
|
|
u32 tile_x = u >> 3;
|
|
|
|
|
u32 local_y = v & 7;
|
|
|
|
|
u32 local_x = u & 7;
|
|
|
|
|
return (tile_y << (log2_w + 3)) | (tile_x << 6) | (local_y << 3) | local_x;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline u8 pxl8_log2(u32 v) {
|
|
|
|
|
u8 r = 0;
|
|
|
|
|
while (v >>= 1) r++;
|
|
|
|
|
return r;
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-27 15:48:11 -06:00
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C" {
|
|
|
|
|
#endif
|
|
|
|
|
|
2026-01-21 23:19:50 -06:00
|
|
|
u32 pxl8_atlas_add_texture(pxl8_atlas* atlas, const u8* pixels, u32 w, u32 h, pxl8_pixel_mode pixel_mode);
|
|
|
|
|
void pxl8_atlas_clear(pxl8_atlas* atlas, u32 preserve_count);
|
2025-11-28 23:42:57 -06:00
|
|
|
pxl8_atlas* pxl8_atlas_create(u32 width, u32 height, pxl8_pixel_mode pixel_mode);
|
2025-10-17 17:54:33 -05:00
|
|
|
void pxl8_atlas_destroy(pxl8_atlas* atlas);
|
2026-01-21 23:19:50 -06:00
|
|
|
bool pxl8_atlas_expand(pxl8_atlas* atlas, pxl8_pixel_mode pixel_mode);
|
2025-10-17 17:54:33 -05:00
|
|
|
const pxl8_atlas_entry* pxl8_atlas_get_entry(const pxl8_atlas* atlas, u32 id);
|
|
|
|
|
u32 pxl8_atlas_get_entry_count(const pxl8_atlas* atlas);
|
|
|
|
|
u32 pxl8_atlas_get_height(const pxl8_atlas* atlas);
|
|
|
|
|
const u8* pxl8_atlas_get_pixels(const pxl8_atlas* atlas);
|
2026-01-21 23:19:50 -06:00
|
|
|
const u8* pxl8_atlas_get_pixels_tiled(const pxl8_atlas* atlas);
|
2025-10-17 17:54:33 -05:00
|
|
|
u32 pxl8_atlas_get_width(const pxl8_atlas* atlas);
|
|
|
|
|
bool pxl8_atlas_is_dirty(const pxl8_atlas* atlas);
|
|
|
|
|
void pxl8_atlas_mark_clean(pxl8_atlas* atlas);
|
2025-11-27 15:48:11 -06:00
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
#endif
|