diff --git a/src/main.cpp b/src/main.cpp index 04cbe73..2b4aafb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -111,21 +111,35 @@ initAssets(memory_arena* arena, RenderState* initRenderState(memory_arena* arena) { - RenderState* rs = ARENA_ALLOC(arena, RenderState, 1); + RenderState* rs = UTIL_ALLOC(1, RenderState); if (rs) { rs->arena = arena; rs->assets = initAssets(arena); rs->gl_ctx = initGLContext(arena); rs->xforms = ARENA_ALLOC(arena, transforms, 1); - rs->handles = ARENA_ALLOC(arena, SDLHandles, 1); + //rs->handles = ARENA_ALLOC(arena, SDLHandles, 1); + rs->handles = UTIL_ALLOC(1, SDLHandles); rs->max_gl_meshes = 256; + // TODO: should have a different arena for gl_meshes, because these will + // be the most volatile objects rs->gl_meshes = ARENA_ALLOC(arena, GLmesh, rs->max_gl_meshes); } return rs; } +void +freeRenderState(RenderState*& rs) +{ + if (rs) { + arenaFree(rs->arena); + utilSafeFree(rs->handles); + utilSafeFree(rs); + rs = nullptr; + } +} + bool initGraphics(SDLHandles* handles) { @@ -318,12 +332,12 @@ loop(RenderState* rs) } void -quit(RenderState* rs) +quit(RenderState*& rs) { SDL_GL_DeleteContext(rs->handles->sdl_gl_ctx); SDL_DestroyWindow(rs->handles->window); SDL_Quit(); - std::free(rs->arena); + freeRenderState(rs); } int