diff options
Diffstat (limited to 'src/logos/tasks.h')
-rw-r--r-- | src/logos/tasks.h | 66 |
1 files changed, 40 insertions, 26 deletions
diff --git a/src/logos/tasks.h b/src/logos/tasks.h index 3e6bd06..2e3dc53 100644 --- a/src/logos/tasks.h +++ b/src/logos/tasks.h @@ -7,54 +7,68 @@ #include "render_types.h" #include "str.h" +typedef enum TaskLifetime { + /** ephemeral tasks must be finished by the end of the frame and thus we use a leak and clear + allocation strategy */ + TASK_EPHEMERAL, + /** multi-frame tasks have a more complex lifetime and must be cleaned up by the caller or in a + separate cleanup callback */ + TASK_MULTIFRAME, + TASK_COUNT +} TaskLifetime; + +typedef enum TaskKind { + TASK_RENDER, + TASK_PHYSICS, + TASK_GAMEPLAY, + TASK_ASSET, + TASK_USERLAND, + TASKKIND_COUNT +} TaskKind; + typedef struct Task { - char* debug_name; - void* params; - bool is_done; + 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; + Str8 filepath; // filepath to the model on disk +} Task_ModelLoad_Params; typedef struct Task_ModelLoad_Result { - Model model; + 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) +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; + Task_ModelLoad_Result* load_res = result; - // push into render -> renderables ? + // 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; +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) + Task_ModelLoad_Typed(params, result, tpool_task_start run_task, tpool_task_on_complete on_success, + tpool_task_on_complete on_failure) - return task; + return task; } |