56 lines
1.3 KiB
C
56 lines
1.3 KiB
C
|
|
#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
|