mark published tick entity store read only
This commit is contained in:
parent
192d5db2a5
commit
787bb9e0d1
@ -119,16 +119,16 @@ void arena_decommit_unused_blocks(struct arena *arena)
|
|||||||
|
|
||||||
void arena_set_readonly(struct arena *arena)
|
void arena_set_readonly(struct arena *arena)
|
||||||
{
|
{
|
||||||
sys_memory_set_committed_readonly(arena->base, arena->committed);
|
|
||||||
#if RTC
|
#if RTC
|
||||||
arena->readonly = true;
|
arena->readonly = true;
|
||||||
#endif
|
#endif
|
||||||
|
sys_memory_set_committed_readonly(arena->base, arena->committed);
|
||||||
}
|
}
|
||||||
|
|
||||||
void arena_set_readwrite(struct arena *arena)
|
void arena_set_readwrite(struct arena *arena)
|
||||||
{
|
{
|
||||||
|
sys_memory_set_committed_readwrite(arena->base, arena->committed);
|
||||||
#if RTC
|
#if RTC
|
||||||
arena->readonly = false;
|
arena->readonly = false;
|
||||||
#endif
|
#endif
|
||||||
sys_memory_set_committed_readwrite(arena->base, arena->committed);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,6 +15,8 @@ GLOBAL struct {
|
|||||||
struct atomic_i32 game_thread_shutdown;
|
struct atomic_i32 game_thread_shutdown;
|
||||||
struct sys_thread game_thread;
|
struct sys_thread game_thread;
|
||||||
|
|
||||||
|
/* Double buffered game state */
|
||||||
|
struct world prev_world; /* Last tick */
|
||||||
struct world world;
|
struct world world;
|
||||||
|
|
||||||
/* Game thread input */
|
/* Game thread input */
|
||||||
@ -51,6 +53,7 @@ struct game_startup_receipt game_startup(struct mixer_startup_receipt *mixer_sr,
|
|||||||
|
|
||||||
/* Initialize tick transmission */
|
/* Initialize tick transmission */
|
||||||
world_alloc(&G.published_tick);
|
world_alloc(&G.published_tick);
|
||||||
|
arena_set_readonly(&G.published_tick.entity_store->arena);
|
||||||
G.published_tick_mutex = sys_mutex_alloc();
|
G.published_tick_mutex = sys_mutex_alloc();
|
||||||
|
|
||||||
G.world.timescale = GAME_TIMESCALE;
|
G.world.timescale = GAME_TIMESCALE;
|
||||||
@ -132,7 +135,7 @@ INTERNAL void spawn_test_entities(void)
|
|||||||
|
|
||||||
/* Child 1 */
|
/* Child 1 */
|
||||||
{
|
{
|
||||||
struct v2 pos = V2(0.25, -0.25);
|
struct v2 pos = V2(1, 0);
|
||||||
struct v2 size = V2(1, 1);
|
struct v2 size = V2(1, 1);
|
||||||
f32 r = PI / 4;
|
f32 r = PI / 4;
|
||||||
|
|
||||||
@ -172,7 +175,11 @@ INTERNAL void publish_game_tick(void)
|
|||||||
{
|
{
|
||||||
__prof;
|
__prof;
|
||||||
struct sys_lock lock = sys_mutex_lock_e(&G.published_tick_mutex);
|
struct sys_lock lock = sys_mutex_lock_e(&G.published_tick_mutex);
|
||||||
|
arena_set_readwrite(&G.published_tick.entity_store->arena);
|
||||||
|
{
|
||||||
world_copy_replace(&G.published_tick, &G.world);
|
world_copy_replace(&G.published_tick, &G.world);
|
||||||
|
}
|
||||||
|
arena_set_readonly(&G.published_tick.entity_store->arena);
|
||||||
atomic_u64_eval_exchange(&G.published_tick_id, G.published_tick.tick_id);
|
atomic_u64_eval_exchange(&G.published_tick_id, G.published_tick.tick_id);
|
||||||
sys_mutex_unlock(&lock);
|
sys_mutex_unlock(&lock);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -167,7 +167,10 @@ void *sys_memory_commit(void *address, u64 size);
|
|||||||
* address space) */
|
* address space) */
|
||||||
void sys_memory_decommit(void *address, u64 size);
|
void sys_memory_decommit(void *address, u64 size);
|
||||||
|
|
||||||
|
/* Mark committed pages as readonly */
|
||||||
void sys_memory_set_committed_readonly(void *address, u64 size);
|
void sys_memory_set_committed_readonly(void *address, u64 size);
|
||||||
|
|
||||||
|
/* Mark committed pages as readable & writeable (default for committed memory) */
|
||||||
void sys_memory_set_committed_readwrite(void *address, u64 size);
|
void sys_memory_set_committed_readwrite(void *address, u64 size);
|
||||||
|
|
||||||
/* ========================== *
|
/* ========================== *
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user