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/core/core_impl.h | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/core/core_impl.h (limited to 'src/core/core_impl.h') 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 @@ +#pragma once + +#include +#include + +#include "buffer.h" +#include "framebuffer.h" +#include "geometry.h" +#include "renderbuffer.h" +#include "shader.h" +#include "shader_program.h" +#include "texture.h" + +#include + +#include + +// TODO: Make a generic (hash, void*) structure and define functions over it. +// Then define a macro that defines type-safe macros given the type of the +// entry. +typedef struct ShaderCacheEntry { + uint64_t hash; + Shader* shader; +} ShaderCacheEntry; + +typedef struct ShaderProgramCacheEntry { + uint64_t hash; + ShaderProgram* program; +} ShaderProgramCacheEntry; + +DEF_MEMPOOL(buffer_pool, Buffer, GFX_MAX_NUM_BUFFERS) +DEF_MEMPOOL(framebuffer_pool, FrameBuffer, GFX_MAX_NUM_FRAMEBUFFERS) +DEF_MEMPOOL(geometry_pool, Geometry, GFX_MAX_NUM_GEOMETRIES) +DEF_MEMPOOL(renderbuffer_pool, RenderBuffer, GFX_MAX_NUM_RENDERBUFFERS) +DEF_MEMPOOL(shader_pool, Shader, GFX_MAX_NUM_SHADERS) +DEF_MEMPOOL(shader_program_pool, ShaderProgram, GFX_MAX_NUM_SHADER_PROGRAMS) +DEF_MEMPOOL(texture_pool, Texture, GFX_MAX_NUM_TEXTURES) + +DEF_MEMPOOL(ShaderCache, ShaderCacheEntry, GFX_MAX_NUM_SHADERS) +DEF_MEMPOOL(ProgramCache, ShaderProgramCacheEntry, GFX_MAX_NUM_SHADER_PROGRAMS) + +typedef struct { + int x; + int y; + int width; + int height; +} Viewport; + +typedef struct GfxCore { + Viewport viewport; + // mempools for render-specific objects: textures, geometry, etc. + buffer_pool buffers; + framebuffer_pool framebuffers; + geometry_pool geometries; + renderbuffer_pool renderbuffers; + shader_pool shaders; + shader_program_pool shader_programs; + texture_pool textures; + // Caches. + ShaderCache shader_cache; + ProgramCache program_cache; +} GfxCore; + +/// Create a new render backend. +void gfx_init_gfxcore(GfxCore*); + +/// Destroy the render backend. +void gfx_del_gfxcore(GfxCore*); -- cgit v1.2.3