pxl8/demo3d/client/world/demo3d_chunk_cache.h

56 lines
1.3 KiB
C
Raw Permalink Normal View History

#pragma once
#include "pxl8_mesh.h"
#include "demo3d_protocol.h"
#include "pxl8_types.h"
#include "demo3d_chunk.h"
#ifdef __cplusplus
extern "C" {
#endif
#define DEMO3D_CHUNK_CACHE_SIZE 512
#define DEMO3D_CHUNK_MAX_FRAGMENTS 255
#define DEMO3D_CHUNK_MAX_DATA_SIZE 131072
typedef struct demo3d_chunk_cache_entry {
demo3d_chunk* chunk;
u64 last_used;
bool valid;
} demo3d_chunk_cache_entry;
typedef struct demo3d_chunk_assembly {
u32 id;
i32 cx, cy, cz;
u32 version;
u8 fragment_count;
u8 fragments_received;
u8* data;
u32 data_size;
u32 data_capacity;
bool active;
bool complete;
} demo3d_chunk_assembly;
typedef struct demo3d_chunk_cache {
demo3d_chunk_cache_entry entries[DEMO3D_CHUNK_CACHE_SIZE];
demo3d_chunk_assembly assembly;
u32 entry_count;
u64 frame_counter;
} demo3d_chunk_cache;
demo3d_chunk_cache* demo3d_chunk_cache_create(void);
void demo3d_chunk_cache_destroy(demo3d_chunk_cache* cache);
pxl8_result demo3d_chunk_cache_receive(demo3d_chunk_cache* cache,
const demo3d_chunk_msg_header* hdr,
const u8* payload, usize len);
demo3d_chunk* demo3d_chunk_cache_get_bsp(demo3d_chunk_cache* cache, u32 id);
void demo3d_chunk_cache_tick(demo3d_chunk_cache* cache);
#ifdef __cplusplus
}
#endif