summaryrefslogtreecommitdiff
path: root/src/resources
diff options
context:
space:
mode:
authoronelin <oscar@nelin.dk>2025-10-31 23:55:42 +0000
committeronelin <oscar@nelin.dk>2025-11-02 22:07:17 +0000
commitd38deeef3af2316a666f8fc0173940bd769b748e (patch)
tree6e30d4a9eea18daa5705c894f28cd99ff047e8f9 /src/resources
parent6c077751982ea2c7bd2d9262b01b9f8602f80dc8 (diff)
Flatten project structure
This will make it easier to break up the code into smaller chunks again later. One would think doing this seems fun to me at this point.
Diffstat (limited to 'src/resources')
-rw-r--r--src/resources/CMakeLists.txt19
-rw-r--r--src/resources/include/engine/resources.h138
-rw-r--r--src/resources/include/engine/resources/model.h30
-rw-r--r--src/resources/include/engine/resources/texture.h17
-rw-r--r--src/resources/src/model.c68
-rw-r--r--src/resources/src/resources.c154
-rw-r--r--src/resources/src/textures.c41
7 files changed, 0 insertions, 467 deletions
diff --git a/src/resources/CMakeLists.txt b/src/resources/CMakeLists.txt
deleted file mode 100644
index 4d3ee22..0000000
--- a/src/resources/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-## Uncomment the following to fetch and build assimp.
-#FetchContent_Declare(assimp
-# GIT_REPOSITORY https://github.com/assimp/assimp.git
-# GIT_TAG v5.3.1
-#)
-#FetchContent_MakeAvailable(assimp)
-
-add_library(daw_resources
- src/resources.c
- src/textures.c
- src/model.c
- )
-
-target_compile_options(daw_resources PUBLIC ${BUILD_OPTS})
-target_include_directories(daw_resources PRIVATE ${DAW_INCLUDE_DIRS} stb)
-target_link_libraries(daw_resources PRIVATE
- assimp
- cglm
- )
diff --git a/src/resources/include/engine/resources.h b/src/resources/include/engine/resources.h
deleted file mode 100644
index d967403..0000000
--- a/src/resources/include/engine/resources.h
+++ /dev/null
@@ -1,138 +0,0 @@
-#ifndef ENGINE_RESOURCES_H
-#define ENGINE_RESOURCES_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <engine/core/types.h>
-#include <engine/rendering/rendering.h>
-
-// TODO
-/* We need some "global resources", available to all states.
- * These are resources used throughout the applications lifetime, such as common
- * fonts, GUI frames, button background images.
- *
- * We need to define state-specific resources as well.
- * - Can both be defined alike?
- * If we lazy-load all resources we can get away with a lot.
- * Maybe use fall-back resources? like the missing source texture, and an ugly
- * font?
- * - Then declare to the engine, in the main function for the game, that these
- * resources are to be made available throughout?
- * - Shaders, oh boy oh shaders.
- * We need to make some meta-shader declaration, so we can declare a set of
- * shaders, that are used to link with other shaders, s.t. we can free up the
- * shaders after compilation.
- * - Make all resource specifications a union.
- * */
-
-enum Asset {
- Asset_error,
- Asset_audio,
- Asset_font,
- Asset_shader,
- Asset_shaderprog,
- Asset_texture,
- Asset_model,
-};
-
-typedef struct {
- enum Asset type;
- const char* path;
-} Asset_AudioSpec;
-
-typedef struct {
- enum Asset type;
- const char* path;
-} Asset_FontSpec;
-
-// if a shader is declared GLOBALLY, we should not destroy it when done with the
-// "main" shader compilations.
-typedef struct {
- enum Asset type;
- // Assume shader type from filename
- const char* path;
-} Asset_ShaderSpec;
-
-// Use list of gluint shader program ids to link against. This translates to a
-// call to compose_shader.
-typedef struct {
- enum Asset type;
- const u32* shader;
- const usize shader_len;
-} Asset_ShaderProgramSpec;
-
-typedef struct {
- enum Asset type;
- const char* path;
- /* Bits per component, set to zero if you don't want to change the format. */
- i32 bpc;
-} Asset_TextureSpec;
-
-typedef struct {
- enum Asset type;
- const char* path;
-} Asset_ModelSpec;
-
-typedef union {
- enum Asset type;
- Asset_AudioSpec audio;
- Asset_FontSpec font;
- Asset_ShaderSpec shader;
- Asset_ShaderProgramSpec shaderprog;
- Asset_TextureSpec texture;
- Asset_ModelSpec model;
-} asset_t;
-
-#include <engine/resources/model.h>
-
-// The resource spec
-typedef struct {
- /* Assorted asset specification, makes reloading them easier. */
- usize assets_len;
- asset_t* assets;
-
- /* Translation from `assets`'s indices to type-specific loaded assets: */
- usize* get; // Let r=Resources, then use as: `r.shader[ r.get[ MyShader ] ]`
-
- /* Loaded assets */
- usize shader_len;
- Shader* shader;
-
- usize texture_len;
- Texture* texture;
-
- usize model_len;
- Model* model;
-} Resources;
-
-#define TextureDefinition(_path, ...) unimplemented
-#define Resource_AudioDefinition(_path, ...) unimplemented
-#define Declare_Shader(PATH) (const asset_t){.shader = {.type = Asset_shader, .path=PATH}}
-#define Declare_ShaderProgram(SHADERS, NUMSHADERS) (const asset_t){.shaderprog = {.type = Asset_shaderprog, .shader=SHADERS, .shader_len=NUMSHADERS}}
-#define Declare_Texture(PATH) (const asset_t){.texture = {.type = Asset_texture, .path=PATH, .bpc=0}}
-
-void* get_asset(Resources* r, u32 idx);
-
-/* Each of resource_load_font, resource_load_texture, and resource_load_audio
- * loads a given resource into the engines memory and returns an identifier.
- */
-//isize resource_load_font(Asset_FontSpec font_def);
-//isize resource_load_texture(Asset_TextureSpec texture_def);
-//isize resource_load_audio(Asset_AudioSpec audio_def);
-
-// Loads all resources specified in `assets` and populates corresponding
-// resources members.
-i32 resources_load(Resources *resources);
-
-/* Makes a resource globally available. This must be called **BEFORE** any call
- * to `engine_run` */
-isize resource_make_global(isize resource_id);
-
-#include <engine/resources/texture.h>
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/resources/include/engine/resources/model.h b/src/resources/include/engine/resources/model.h
deleted file mode 100644
index a2fb29c..0000000
--- a/src/resources/include/engine/resources/model.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef ENGINE_RESOURCES_MODEL_H
-#define ENGINE_RESOURCES_MODEL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <engine/core/types.h>
-
-typedef enum {
- Model_error,
- Model_obj,
-} ModelType;
-
-typedef struct {
- ModelType format;
-
- u32 m_uiVAO;
- u32 m_uiVBO;
- u32 m_uiIBO;
- unsigned m_uiNumIndices;
-} Model;
-
-#include <engine/resources.h>
-Model load_model(const Asset_ModelSpec *restrict ms);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/resources/include/engine/resources/texture.h b/src/resources/include/engine/resources/texture.h
deleted file mode 100644
index 9f533d6..0000000
--- a/src/resources/include/engine/resources/texture.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef TEXTURE_H
-#define TEXTURE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <engine/core/types.h>
-#include <engine/resources.h>
-#include <engine/rendering/rendering.h>
-
-Texture load_texture(const Asset_TextureSpec *restrict ts);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/resources/src/model.c b/src/resources/src/model.c
deleted file mode 100644
index 7244e63..0000000
--- a/src/resources/src/model.c
+++ /dev/null
@@ -1,68 +0,0 @@
-#include <engine/engine.h>
-#include <engine/core/logging.h>
-#include <engine/resources/model.h>
-#include <assimp/cimport.h>
-#include <assimp/scene.h>
-#include <assimp/postprocess.h>
-
-Model load_model(const Asset_ModelSpec *restrict ms) {
- ModelType format = Model_error;
-
- /*
- isize vertices_len = 0;
- vec3 *vertices = malloc(sizeof(vec3) * 512);
- usize *vertices_idx = malloc(sizeof(usize) * 512);
-
- isize uvs_len = 0;
- vec2 *uvs = malloc(sizeof(vec2) * 512);
- usize *uvs_idx = malloc(sizeof(usize) * 512);
-
- isize normals_len = 0;
- vec3 *normals = malloc(sizeof(vec3) * 512);
- usize *normals_idx = malloc(sizeof(usize) * 512);
- */
-
- // For now, just default to obj
- format = Model_obj;
-
- FILE* f = fopen(ms->path, "r");
- if (f == NULL) {
- ERROR("Failed to load file " TERM_COLOR_YELLOW "%s" TERM_COLOR_RESET, ms->path);
- return (Model){.format = format};
- }
- const usize filesz = f_get_sz(f);
-
- char* filecontets = calloc(filesz, sizeof(char));
- fread(filecontets, sizeof(char), filesz, f);
-
- // Start the import on the given file with some example postprocessing
- // Usually - if speed is not the most important aspect for you - you'll t
- // probably to request more postprocessing than we do in this example.
- const struct aiScene* scene = aiImportFile( filecontets,
- aiProcess_CalcTangentSpace |
- aiProcess_Triangulate |
- aiProcess_JoinIdenticalVertices |
- aiProcess_SortByPType);
-
- free(filecontets);
- // If the import failed, report it
- if( NULL == scene) {
- ERROR("Failed to import %s: %s", ms->path, aiGetErrorString());
- return (Model){.format = format};
- }
-
- //// Now we can access the file's contents
- //DoTheSceneProcessing(scene);
-
- //// We're done. Release all resources associated with this import
- aiReleaseImport(scene);
-
- {
- Model m = {};
- m.format = format;
-
- // TODO add index array
-
- return m;
- }
-}
diff --git a/src/resources/src/resources.c b/src/resources/src/resources.c
deleted file mode 100644
index 6e35a4f..0000000
--- a/src/resources/src/resources.c
+++ /dev/null
@@ -1,154 +0,0 @@
-#include <string.h>
-
-#include <engine/core/types.h>
-#include <engine/core/logging.h>
-#include <engine/core/platform.h>
-#include <engine/resources.h>
-
-extern Instance* GLOBAL_PLATFORM;
-
-extern const char* ShaderType_str[];
-
-void* get_asset(Resources* r, u32 idx) {
- switch (r->assets[idx].type) {
- case Asset_shader:
- // The shaders used to compile shader programs are not preserved.
- WARN("We don't store pure shaders");
- break;
-
- case Asset_shaderprog:
- LOG("Idx: r->get[%d] = %d", idx, r->get[idx]);
- //LOG("Ptr: &r->shader[r->get[idx]] = %z", &r->shader[r->get[idx]]);
- return &r->shader[r->get[idx]];
-
- case Asset_texture:
- return &r->texture[r->get[idx]];
-
- case Asset_error:
- case Asset_audio:
- case Asset_font:
- default:
- ERROR("Asset type Not implemented");
- break;
- }
- return NULL;
-}
-
-i32 resources_load(Resources *resources) {
- resources->get = calloc(resources->assets_len, sizeof(usize));
- usize audio_len = 0;
- usize font_len = 0;
- usize shader_len = 0;
- usize shaderprog_len = 0;
- usize texture_len = 0;
-
- usize i = 0;
-
- // Count each type of resource so we can allocate appropriate sizes.
- for (i = 0; i < resources->assets_len; i++) {
- usize idx = 0;
-
- switch (resources->assets[i].type) {
- case Asset_audio: idx = audio_len++; WARN("Audio resource type not implemented!"); break;
- case Asset_font: idx = font_len++; WARN("Font resource type not implemented!"); break;
- case Asset_shader: idx = shader_len++; break;
- case Asset_shaderprog: idx = shaderprog_len++; break;
- case Asset_texture: idx = texture_len++; break;
-
- case Asset_error: break;
- default:
- ERROR("Unknown resource type!");
- exit(EXIT_FAILURE);
- break;
- }
-
- // Update index translation table.
- resources->get[i] = idx;
- }
-
- //resources->audio = calloc(audio_len, sizeof());
- //resources->font = calloc(font_len, sizeof());
- resources->shader = calloc(shaderprog_len, sizeof(Shader));
- resources->texture = calloc(texture_len, sizeof(Texture));
-
- Shader* imm_shader = calloc(shader_len, sizeof(Shader));
-
- audio_len = 0;
- font_len = 0;
- shader_len = 0;
- shaderprog_len = 0;
- texture_len = 0;
-
- for (i = 0; i < resources->assets_len; i++) {
- switch (resources->assets[i].type) {
- case Asset_audio:
- //resources->audio_len++;
- WARN("Audio resource type not implemented!");
- break;
- case Asset_font:
- //resources->font_len++;
- WARN("Font resource type not implemented!");
- break;
- case Asset_shader: {
- ShaderType t =
- guess_shadertype_from_filename(resources->assets[i].shader.path);
- const Shader s = compile_shader(resources->assets[i].shader.path, t);
- LOG("Compiled %s! (%s)", resources->assets[i].shader.path, ShaderType_str[t]);
-
- imm_shader[shader_len] = s;
- shader_len++;
- } break;
- case Asset_shaderprog: {
- const usize sz = resources->assets[i].shaderprog.shader_len;
- const u32* shader_ids = resources->assets[i].shaderprog.shader;
- Shader* shaders = calloc(sz, sizeof(Shader));
-
- for (usize j = 0; j < sz; j++) {
- //DEBUG("shader[%d] = %d\n", j, imm_shader[resources->assets[i].shaderprog.shader[j]].program);
- //shaders[j] = imm_shader[resources->assets[i].shaderprog.shader[j]];
- u32 shader_idx = shader_ids[j];
- //DEBUG("Idx: get[%d] = %d\n", shader_idx, imm_shader[resources->get[shader_idx]].program);
- shaders[j] = imm_shader[resources->get[shader_idx]];
- }
-
- const Shader s = compose_shader(shaders, sz);
-
- resources->shader[resources->shader_len] = s;
- resources->shader_len++;
- } break;
- case Asset_texture:
- resources->texture[resources->texture_len] = load_texture(&resources->assets[i].texture);
- resources->texture_len++;
- LOG("Loaded texture \"%s\"!", resources->assets[i].texture.path);
- break;
-
- case Asset_error:
- break;
- default:
- ERROR("Unknown resource type!");
- exit(EXIT_FAILURE);
- break;
- }
-
- //resources->get[i] = idx;
- }
-
- LOG("Total assets: %lu", resources->assets_len);
- LOG(" Shaders: %lu", resources->shader_len);
- LOG(" Textures: %lu", resources->texture_len);
-
- // Delete the immediate shaders
- for (i = 0; i < shader_len; i++) {
- // glDeleteShader()
- }
-
- shaders_delete(imm_shader, shader_len);
- free(imm_shader);
-
- return 0;
-}
-
-isize resource_make_global(isize resource_id) {
- ERROR("`resource_make_global` Not implemented");
- return -1;
-}
diff --git a/src/resources/src/textures.c b/src/resources/src/textures.c
deleted file mode 100644
index 913c931..0000000
--- a/src/resources/src/textures.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <engine/core/logging.h>
-#include <engine/resources.h>
-#include <stb/stb_image.h>
-
-/* Uses stb_image to load an image, and passes it to the renderer for
- * backend-specific texture creation. */
-Texture load_texture(const Asset_TextureSpec *restrict ts) {
- int width;
- int height;
- int components_per_pixel;
- unsigned char* img;
- Texture t;
- const Texture err = (Texture){.id = 0, .width = 0, .height = 0};
-
- if (ts == NULL) {
- ERROR("Invalid Asset_TextureSpec\n");
- return err;
- }
-
- if (ts->path == NULL) {
- ERROR("Missing path in Asset_TextureSpec\n");
- return err;
- }
-
- img = stbi_load(ts->path, &width, &height, &components_per_pixel, 0);
-
- if (img == NULL) {
- ERROR("Failed to load image %s", ts->path);
- return err;
- } else {
- t = createTextureFromImageData(img, width, height, (u8)components_per_pixel);
- stbi_image_free(img);
- }
-
- if (t.id == 0) {
- ERROR("Failed to create texture %s!", ts->path);
- return err;
- }
-
- return t;
-}