aboutsummaryrefslogtreecommitdiff
path: root/src/core/core_impl.h
diff options
context:
space:
mode:
author3gg <3gg@shellblade.net>2025-06-27 10:18:39 -0700
committer3gg <3gg@shellblade.net>2025-06-27 10:18:39 -0700
commitbd57f345ed9dbed1d81683e48199626de2ea9044 (patch)
tree4221f2f2a7ad2244d2e93052bd68187ec91b8ea9 /src/core/core_impl.h
parent9a82ce0083437a4f9f58108b2c23b957d2249ad8 (diff)
Restructure projectHEADmain
Diffstat (limited to 'src/core/core_impl.h')
-rw-r--r--src/core/core_impl.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/core/core_impl.h b/src/core/core_impl.h
new file mode 100644
index 0000000..eefdfbe
--- /dev/null
+++ b/src/core/core_impl.h
@@ -0,0 +1,68 @@
1#pragma once
2
3#include <gfx/core.h>
4#include <gfx/sizes.h>
5
6#include "buffer.h"
7#include "framebuffer.h"
8#include "geometry.h"
9#include "renderbuffer.h"
10#include "shader.h"
11#include "shader_program.h"
12#include "texture.h"
13
14#include <mempool.h>
15
16#include <stdint.h>
17
18// TODO: Make a generic (hash, void*) structure and define functions over it.
19// Then define a macro that defines type-safe macros given the type of the
20// entry.
21typedef struct ShaderCacheEntry {
22 uint64_t hash;
23 Shader* shader;
24} ShaderCacheEntry;
25
26typedef struct ShaderProgramCacheEntry {
27 uint64_t hash;
28 ShaderProgram* program;
29} ShaderProgramCacheEntry;
30
31DEF_MEMPOOL(buffer_pool, Buffer, GFX_MAX_NUM_BUFFERS)
32DEF_MEMPOOL(framebuffer_pool, FrameBuffer, GFX_MAX_NUM_FRAMEBUFFERS)
33DEF_MEMPOOL(geometry_pool, Geometry, GFX_MAX_NUM_GEOMETRIES)
34DEF_MEMPOOL(renderbuffer_pool, RenderBuffer, GFX_MAX_NUM_RENDERBUFFERS)
35DEF_MEMPOOL(shader_pool, Shader, GFX_MAX_NUM_SHADERS)
36DEF_MEMPOOL(shader_program_pool, ShaderProgram, GFX_MAX_NUM_SHADER_PROGRAMS)
37DEF_MEMPOOL(texture_pool, Texture, GFX_MAX_NUM_TEXTURES)
38
39DEF_MEMPOOL(ShaderCache, ShaderCacheEntry, GFX_MAX_NUM_SHADERS)
40DEF_MEMPOOL(ProgramCache, ShaderProgramCacheEntry, GFX_MAX_NUM_SHADER_PROGRAMS)
41
42typedef struct {
43 int x;
44 int y;
45 int width;
46 int height;
47} Viewport;
48
49typedef struct GfxCore {
50 Viewport viewport;
51 // mempools for render-specific objects: textures, geometry, etc.
52 buffer_pool buffers;
53 framebuffer_pool framebuffers;
54 geometry_pool geometries;
55 renderbuffer_pool renderbuffers;
56 shader_pool shaders;
57 shader_program_pool shader_programs;
58 texture_pool textures;
59 // Caches.
60 ShaderCache shader_cache;
61 ProgramCache program_cache;
62} GfxCore;
63
64/// Create a new render backend.
65void gfx_init_gfxcore(GfxCore*);
66
67/// Destroy the render backend.
68void gfx_del_gfxcore(GfxCore*);