blob: 8c513a1e90e517897101e0393cbbe3b700ed3d42 (
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#include <gfx/gfx.h>
#include "asset/asset_cache.h"
#include "render/core_impl.h"
#include "renderer/imm_renderer_impl.h"
#include "renderer/renderer_impl.h"
#include "scene/scene_graph.h"
#include "scene/scene_impl.h"
#include "scene/scene_memory.h"
#include <cstring.h>
#include <log/log.h>
#include <assert.h>
#include <stdlib.h>
typedef struct Gfx {
AssetCache asset_cache;
GfxCore gfxcore;
Renderer renderer;
ImmRenderer imm_renderer;
} Gfx;
Gfx* gfx_init(void) {
if (!gladLoadGL()) {
LOGE("Failed loading glad!");
return 0;
}
Gfx* gfx = calloc(1, sizeof(Gfx));
if (!gfx) {
return 0;
}
gfx_init_gfxcore(&gfx->gfxcore);
if (!renderer_make(&gfx->renderer, &gfx->gfxcore)) {
gfx_destroy(&gfx);
return 0;
}
if (!imm_renderer_make(&gfx->imm_renderer, &gfx->gfxcore)) {
// TODO: Add error logs to the initialization failure cases here and inside
// the renderers.
gfx_destroy(&gfx);
return 0;
}
gfx_init_asset_cache(&gfx->asset_cache);
scene_mem_init();
return gfx;
}
void gfx_destroy(Gfx** gfx) {
if (!gfx) {
return;
}
scene_mem_destroy();
gfx_destroy_asset_cache(&(*gfx)->asset_cache);
renderer_destroy(&(*gfx)->renderer);
imm_renderer_destroy(&(*gfx)->imm_renderer);
gfx_del_gfxcore(&(*gfx)->gfxcore);
free(*gfx);
*gfx = 0;
}
GfxCore* gfx_get_core(Gfx* gfx) {
assert(gfx);
return &gfx->gfxcore;
}
Renderer* gfx_get_renderer(Gfx* gfx) {
assert(gfx);
return &gfx->renderer;
}
ImmRenderer* gfx_get_imm_renderer(Gfx* gfx) {
assert(gfx);
return &gfx->imm_renderer;
}
AssetCache* gfx_get_asset_cache(Gfx* gfx) {
assert(gfx);
return &gfx->asset_cache;
}
|