|
|
|
|
@ -19,46 +19,6 @@ GLContext* initGLContext(MemoryArena* arena,
|
|
|
|
|
|
|
|
|
|
// interface
|
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
initRenderGroup(RenderGroup* rg, |
|
|
|
|
MemoryArena* arena, |
|
|
|
|
shader_program* shader, |
|
|
|
|
u32 num_entities, |
|
|
|
|
const char* name) |
|
|
|
|
{ |
|
|
|
|
rg->max_entities = num_entities; |
|
|
|
|
rg->shader = shader; |
|
|
|
|
rg->name = arenaCopyCStr(arena, name); |
|
|
|
|
rg->entities = ARENA_ALLOC(arena, Entity, num_entities); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
freeRenderGroup(RenderGroup* rg, MemoryArena* arena) |
|
|
|
|
{ |
|
|
|
|
printf("%s(), should probably look into freeing arena memory?\n", |
|
|
|
|
__FUNCTION__); |
|
|
|
|
assert(0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Entity* |
|
|
|
|
getFreeEntity(RenderGroup* rg) |
|
|
|
|
{ |
|
|
|
|
if (rg->num_entities < rg->max_entities) |
|
|
|
|
return &rg->entities[rg->num_entities++]; |
|
|
|
|
|
|
|
|
|
printf("%s(), render group full\n", __FUNCTION__); |
|
|
|
|
return nullptr; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
RenderGroup* |
|
|
|
|
getFreeRenderGroup(RenderState* rs) |
|
|
|
|
{ |
|
|
|
|
if (rs->num_render_groups < rs->max_render_groups) |
|
|
|
|
return &rs->render_groups[rs->num_render_groups++]; |
|
|
|
|
|
|
|
|
|
printf("%s(), no free render group\n", __FUNCTION__); |
|
|
|
|
return nullptr; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
RenderState* |
|
|
|
|
initRenderState(u32 max_models, |
|
|
|
|
@ -115,6 +75,47 @@ freeRenderState(RenderState*& rs)
|
|
|
|
|
SDL_Quit(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
initRenderGroup(RenderGroup* rg, |
|
|
|
|
MemoryArena* arena, |
|
|
|
|
shader_program* shader, |
|
|
|
|
u32 num_entities, |
|
|
|
|
const char* name) |
|
|
|
|
{ |
|
|
|
|
rg->max_entities = num_entities; |
|
|
|
|
rg->shader = shader; |
|
|
|
|
rg->name = arenaCopyCStr(arena, name); |
|
|
|
|
rg->entities = ARENA_ALLOC(arena, Entity, num_entities); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
freeRenderGroup(RenderGroup* rg, MemoryArena* arena) |
|
|
|
|
{ |
|
|
|
|
printf("%s(), should probably look into freeing arena memory?\n", |
|
|
|
|
__FUNCTION__); |
|
|
|
|
assert(0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
RenderGroup* |
|
|
|
|
getFreeRenderGroup(RenderState* rs) |
|
|
|
|
{ |
|
|
|
|
if (rs->num_render_groups < rs->max_render_groups) |
|
|
|
|
return &rs->render_groups[rs->num_render_groups++]; |
|
|
|
|
|
|
|
|
|
printf("%s(), no free render group\n", __FUNCTION__); |
|
|
|
|
return nullptr; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Entity* |
|
|
|
|
getFreeEntity(RenderGroup* rg) |
|
|
|
|
{ |
|
|
|
|
if (rg->num_entities < rg->max_entities) |
|
|
|
|
return &rg->entities[rg->num_entities++]; |
|
|
|
|
|
|
|
|
|
printf("%s(), render group full\n", __FUNCTION__); |
|
|
|
|
return nullptr; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
doRenderLoop(RenderState* rs, |
|
|
|
|
u32 framerate, |
|
|
|
|
|