diff --git a/src/asset.h b/src/asset.h index c43b280..4eac966 100644 --- a/src/asset.h +++ b/src/asset.h @@ -48,6 +48,7 @@ struct model struct Assets { + MemoryArena* arena; u32 num_models; u32 max_models; model* models; diff --git a/src/main.cpp b/src/main.cpp index c8ce410..d19fdae 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -48,9 +48,7 @@ struct RenderState transforms* xforms; // NOTE: would be part of camera in libTangerine SDLHandles* handles; GLContext* gl_ctx; - - MemoryArena* asset_arena; - Assets* assets; + Assets assets; MemoryArena* rg_arena; u32 num_render_groups; @@ -139,10 +137,10 @@ rotateEntity(Entity* e, glm::vec3 axis, float radians) model* getModelByPath(RenderState* rs, const char* filepath) { - model* mdl = assetGetCachedModel(rs->assets, utilFNV64a_str(filepath)); + model* mdl = assetGetCachedModel(&rs->assets, utilFNV64a_str(filepath)); if (!mdl) - mdl = assetLoadFromFile(rs->assets, rs->asset_arena, filepath); + mdl = assetLoadFromFile(&rs->assets, rs->assets.arena, filepath); return mdl; } @@ -157,21 +155,7 @@ getFreeRenderGroup(RenderState* rs) return nullptr; } -#define DEFAULT_MODEL_COUNT 256 #define DEFAULT_TEXTURE_COUNT 64 -Assets* -initAssets(MemoryArena* arena, - u32 num_models = DEFAULT_MODEL_COUNT, - u32 num_textures = DEFAULT_TEXTURE_COUNT) -{ - Assets* assets = ARENA_ALLOC(arena, Assets, 1); - assets->max_models = num_models; - assets->models = ARENA_ALLOC(arena, model, num_models); - assets->max_textures = num_textures; - assets->textures = ARENA_ALLOC(arena, util_image, num_textures); - return assets; -} - #define DEFAULT_SHADER_COUNT 64 #define DEFAULT_UBO_COUNT 32 GLContext* @@ -188,23 +172,29 @@ initGLContext(MemoryArena* arena) return gl_ctx; } +#define DEFAULT_MODEL_COUNT 256 #define DEFAULT_RENDER_GROUP_COUNT 256 RenderState* -initRenderState() +initRenderState(u32 max_models = DEFAULT_MODEL_COUNT, + u32 max_textures = DEFAULT_TEXTURE_COUNT) { RenderState* rs = UTIL_ALLOC(1, RenderState); if (rs) { - rs->asset_arena = arenaInit(DEFAULT_ARENA_SIZE); - rs->assets = initAssets(rs->asset_arena); + rs->assets.arena = arenaInit(DEFAULT_ARENA_SIZE); + rs->assets.max_models = max_models; + rs->assets.models = ARENA_ALLOC(rs->assets.arena, model, max_models); + rs->assets.max_textures = max_textures; + rs->assets.textures = + ARENA_ALLOC(rs->assets.arena, util_image, max_textures); rs->rg_arena = arenaInit(DEFAULT_ARENA_SIZE); rs->max_render_groups = DEFAULT_RENDER_GROUP_COUNT; rs->render_groups = ARENA_ALLOC(rs->rg_arena, RenderGroup, DEFAULT_RENDER_GROUP_COUNT); - rs->gl_ctx = initGLContext(rs->asset_arena); - rs->xforms = ARENA_ALLOC(rs->asset_arena, transforms, 1); + rs->gl_ctx = initGLContext(rs->assets.arena); + rs->xforms = ARENA_ALLOC(rs->assets.arena, transforms, 1); rs->handles = UTIL_ALLOC(1, SDLHandles); } @@ -215,7 +205,7 @@ void freeRenderState(RenderState*& rs) { if (rs) { - arenaFree(rs->asset_arena); + arenaFree(rs->assets.arena); utilSafeFree(rs->handles); utilSafeFree(rs); rs = nullptr; @@ -279,7 +269,7 @@ initGraphics(SDLHandles* handles) bool addShaders(RenderState* rs) { - if (!addShaderProgram(rs->asset_arena, + if (!addShaderProgram(rs->assets.arena, rs->gl_ctx, "../data/shader.vert", "../data/shader.frag", @@ -289,7 +279,7 @@ addShaders(RenderState* rs) return false; } - if (!addShaderProgram(rs->asset_arena, + if (!addShaderProgram(rs->assets.arena, rs->gl_ctx, "../data/colored_vertices.vert", "../data/colored_vertices.frag", @@ -299,7 +289,7 @@ addShaders(RenderState* rs) return false; } - if (!addShaderProgram(rs->asset_arena, + if (!addShaderProgram(rs->assets.arena, rs->gl_ctx, "../data/debug.vert", "../data/debug.frag", @@ -439,7 +429,7 @@ main() // FIXME: need to test this with another shader that has another UBO gl_buffer& ubo = rs->gl_ctx->uniform_buffers[rs->gl_ctx->num_ubos++]; - initTransforms(rs->asset_arena, rs->xforms, &ubo, rs->gl_ctx); + initTransforms(rs->assets.arena, rs->xforms, &ubo, rs->gl_ctx); if (!addShaders(rs)) { LOG(Error) << "error loading shaders\n";