gutter_runner/game/scratch/scratch.odin

31 lines
581 B
Odin

package scratch
import "core:mem"
import "core:mem/virtual"
@(thread_local)
scratch_init_done: bool
@(thread_local)
arenas: [2]virtual.Arena
@(thread_local)
allocators: [2]mem.Allocator
_init_scratch :: #force_inline proc() {
if !scratch_init_done {
for i in 0 ..< 2 {
_ = virtual.arena_init_static(&arenas[i])
allocators[i] = virtual.arena_allocator(&arenas[i])
}
}
}
get_scratch :: proc(conflict := context.temp_allocator) -> mem.Allocator {
_init_scratch()
if conflict.data == allocators[1].data {
return allocators[0]
} else {
return allocators[1]
}
}