diff options
Diffstat (limited to 'src/logos/tasks.h')
-rw-r--r-- | src/logos/tasks.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/logos/tasks.h b/src/logos/tasks.h new file mode 100644 index 0000000..3e6bd06 --- /dev/null +++ b/src/logos/tasks.h @@ -0,0 +1,60 @@ +/** + * Common jobs that get run + */ +#pragma once +#include "defines.h" +#include "logos/threadpool.h" +#include "render_types.h" +#include "str.h" + +typedef struct Task { + char* debug_name; + void* params; + bool is_done; +} Task; + +// Macro : give Params and Result structs and it creates a function that knows +// correct sizes + +typedef struct Task_ModelLoad_Params { + Str8 filepath; // filepath to the model on disk + } Task_ModelLoad_Params; +typedef struct Task_ModelLoad_Result { + Model model; +} Task_ModelLoad_Result; + +// Internally it will allocate data for each + +static bool Task_ModelLoad_Typed( + Task_ModelLoad_Params* params, + Task_ModelLoad_Result* result, + tpool_task_start run_task, + tpool_task_on_complete on_success, + tpool_task_on_complete on_failure +) { + threadpool_add_task(pool, , tpool_task_on_complete on_success, tpool_task_on_complete on_fail, bool buffer_result_for_main_thread, void *param_data, u32 param_data_size, u32 result_data_size) +} + +// do task +// success +void model_load_success(task_globals* globals, void* result) { + Task_ModelLoad_Result* load_res = result; + + // push into render -> renderables ? +} +// fail + + +// we can define our custom task here that wraps the more verbose function pointers +static Task Task_ModelLoad( + Task_ModelLoad_Params* params, + Task_ModelLoad_Result* result +) { + Task task; + task.debug_name = "Load Model"; + task.params = params; + + Task_ModelLoad_Typed(params, result, tpool_task_start run_task, tpool_task_on_complete on_success, tpool_task_on_complete on_failure) + + return task; +} |