aboutsummaryrefslogtreecommitdiff
path: root/src/gfx.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gfx.c')
-rw-r--r--src/gfx.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/gfx.c b/src/gfx.c
new file mode 100644
index 0000000..cd2ac90
--- /dev/null
+++ b/src/gfx.c
@@ -0,0 +1,73 @@
1#include <gfx/gfx.h>
2
3#include "asset/asset_cache.h"
4#include "core/core_impl.h"
5#include "renderer/imm_renderer_impl.h"
6#include "renderer/renderer_impl.h"
7#include "scene/scene_memory.h"
8
9#include <log/log.h>
10
11#include <assert.h>
12#include <stdlib.h>
13
14typedef struct Gfx {
15 AssetCache asset_cache;
16 GfxCore gfxcore;
17 Renderer renderer;
18 ImmRenderer imm_renderer;
19} Gfx;
20
21Gfx* gfx_init(void) {
22 Gfx* gfx = calloc(1, sizeof(Gfx));
23 if (!gfx) {
24 return 0;
25 }
26 gfx_init_gfxcore(&gfx->gfxcore);
27 if (!renderer_make(&gfx->renderer, &gfx->gfxcore)) {
28 gfx_destroy(&gfx);
29 return 0;
30 }
31 if (!imm_renderer_make(&gfx->imm_renderer, &gfx->gfxcore)) {
32 // TODO: Add error logs to the initialization failure cases here and inside
33 // the renderers.
34 gfx_destroy(&gfx);
35 return 0;
36 }
37 gfx_init_asset_cache(&gfx->asset_cache);
38 scene_mem_init();
39 return gfx;
40}
41
42void gfx_destroy(Gfx** gfx) {
43 if (!gfx) {
44 return;
45 }
46 scene_mem_destroy();
47 gfx_destroy_asset_cache(&(*gfx)->asset_cache);
48 renderer_destroy(&(*gfx)->renderer);
49 imm_renderer_destroy(&(*gfx)->imm_renderer);
50 gfx_del_gfxcore(&(*gfx)->gfxcore);
51 free(*gfx);
52 *gfx = 0;
53}
54
55GfxCore* gfx_get_core(Gfx* gfx) {
56 assert(gfx);
57 return &gfx->gfxcore;
58}
59
60Renderer* gfx_get_renderer(Gfx* gfx) {
61 assert(gfx);
62 return &gfx->renderer;
63}
64
65ImmRenderer* gfx_get_imm_renderer(Gfx* gfx) {
66 assert(gfx);
67 return &gfx->imm_renderer;
68}
69
70AssetCache* gfx_get_asset_cache(Gfx* gfx) {
71 assert(gfx);
72 return &gfx->asset_cache;
73}