From bd57f345ed9dbed1d81683e48199626de2ea9044 Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Fri, 27 Jun 2025 10:18:39 -0700 Subject: Restructure project --- src/gfx.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/gfx.c (limited to 'src/gfx.c') 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 @@ +#include + +#include "asset/asset_cache.h" +#include "core/core_impl.h" +#include "renderer/imm_renderer_impl.h" +#include "renderer/renderer_impl.h" +#include "scene/scene_memory.h" + +#include + +#include +#include + +typedef struct Gfx { + AssetCache asset_cache; + GfxCore gfxcore; + Renderer renderer; + ImmRenderer imm_renderer; +} Gfx; + +Gfx* gfx_init(void) { + 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; +} -- cgit v1.2.3