A 3D game engine from scratch.
at main 60 lines 1.1 kB view raw
1// (c) 2020 Vlad-Stefan Harbuz <vlad@vladh.net> 2 3#include <thread> 4#include "debug.hpp" 5#include "logs.hpp" 6#include "queue.hpp" 7#include "tasks.hpp" 8#include "intrinsics.hpp" 9 10 11tasks::State *tasks::state = nullptr; 12 13 14void 15tasks::push(Task task) 16{ 17 tasks::state->task_queue.push(task); 18} 19 20 21void 22tasks::run_loading_loop( 23 std::mutex *mutex, 24 bool *should_stop, 25 u32 idx_thread 26) { 27 while (!*should_stop) { 28 Task *task = nullptr; 29 30 mutex->lock(); 31 if (tasks::state->task_queue.size > 0) { 32 task = tasks::state->task_queue.pop(); 33 } 34 mutex->unlock(); 35 36 if (task) { 37 run_task(task); 38 } 39 40 std::this_thread::sleep_for(std::chrono::milliseconds(1)); 41 } 42} 43 44 45void 46tasks::init(tasks::State *tasks_state, memory::Pool *pool) 47{ 48 tasks::state = tasks_state; 49 tasks::state->task_queue = Queue<Task>(pool, 128, "task_queue"); 50} 51 52 53void 54tasks::run_task(Task *task) 55{ 56 auto t0 = debug_start_timer(); 57 task->fn(task->argument_1); 58 f64 duration = debug_end_timer(t0); 59 logs::info("Task took %.0fms", duration); 60}