summaryrefslogtreecommitdiff
path: root/src/logos/tasks.h
blob: 3e6bd063e444c01e0f8b81f81e6c4c632115a669 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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;
}