|
|
|
|
@ -24,7 +24,7 @@ struct SDLHandles
|
|
|
|
|
|
|
|
|
|
struct RenderState |
|
|
|
|
{ |
|
|
|
|
memory_arena* arena; |
|
|
|
|
memory_arena* asset_arena; |
|
|
|
|
transforms* xforms; // NOTE: would be part of camera in libTangerine
|
|
|
|
|
SDLHandles* handles; |
|
|
|
|
GLContext* gl_ctx; |
|
|
|
|
@ -33,6 +33,7 @@ struct RenderState
|
|
|
|
|
|
|
|
|
|
// FIXME: WIP
|
|
|
|
|
// TODO: need to initialize groups
|
|
|
|
|
memory_arena* rg_arena; |
|
|
|
|
u32 num_render_groups; |
|
|
|
|
u32 max_render_groups; |
|
|
|
|
RenderGroup* render_groups; |
|
|
|
|
@ -61,7 +62,7 @@ getModel(RenderState* rs, const char* filepath)
|
|
|
|
|
model* mdl = assetGetCached(rs->assets, utilFNV64a_str(filepath)); |
|
|
|
|
|
|
|
|
|
if (!mdl) |
|
|
|
|
mdl = assetLoadFromFile(rs->assets, rs->arena, filepath); |
|
|
|
|
mdl = assetLoadFromFile(rs->assets, rs->asset_arena, filepath); |
|
|
|
|
|
|
|
|
|
return mdl; |
|
|
|
|
} |
|
|
|
|
@ -109,21 +110,19 @@ initAssets(memory_arena* arena,
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
RenderState* |
|
|
|
|
initRenderState(memory_arena* arena) |
|
|
|
|
initRenderState() |
|
|
|
|
{ |
|
|
|
|
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->asset_arena = arenaInit(DEFAULT_ARENA_SIZE); |
|
|
|
|
rs->rg_arena = arenaInit(DEFAULT_ARENA_SIZE); |
|
|
|
|
rs->assets = initAssets(rs->asset_arena); |
|
|
|
|
rs->gl_ctx = initGLContext(rs->asset_arena); |
|
|
|
|
rs->xforms = ARENA_ALLOC(rs->asset_arena, transforms, 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); |
|
|
|
|
rs->gl_meshes = ARENA_ALLOC(rs->rg_arena, GLmesh, rs->max_gl_meshes); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return rs; |
|
|
|
|
@ -133,7 +132,7 @@ void
|
|
|
|
|
freeRenderState(RenderState*& rs) |
|
|
|
|
{ |
|
|
|
|
if (rs) { |
|
|
|
|
arenaFree(rs->arena); |
|
|
|
|
arenaFree(rs->asset_arena); |
|
|
|
|
utilSafeFree(rs->handles); |
|
|
|
|
utilSafeFree(rs); |
|
|
|
|
rs = nullptr; |
|
|
|
|
@ -197,7 +196,7 @@ initGraphics(SDLHandles* handles)
|
|
|
|
|
bool |
|
|
|
|
addShaders(RenderState* rs) |
|
|
|
|
{ |
|
|
|
|
if (!addShaderProgram(rs->arena, |
|
|
|
|
if (!addShaderProgram(rs->asset_arena, |
|
|
|
|
rs->gl_ctx, |
|
|
|
|
"../data/shader.vert", |
|
|
|
|
"../data/shader.frag", |
|
|
|
|
@ -207,7 +206,7 @@ addShaders(RenderState* rs)
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!addShaderProgram(rs->arena, |
|
|
|
|
if (!addShaderProgram(rs->asset_arena, |
|
|
|
|
rs->gl_ctx, |
|
|
|
|
"../data/colored_vertices.vert", |
|
|
|
|
"../data/colored_vertices.frag", |
|
|
|
|
@ -217,7 +216,7 @@ addShaders(RenderState* rs)
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!addShaderProgram(rs->arena, |
|
|
|
|
if (!addShaderProgram(rs->asset_arena, |
|
|
|
|
rs->gl_ctx, |
|
|
|
|
"../data/debug.vert", |
|
|
|
|
"../data/debug.frag", |
|
|
|
|
@ -343,8 +342,7 @@ quit(RenderState*& rs)
|
|
|
|
|
int |
|
|
|
|
main() |
|
|
|
|
{ |
|
|
|
|
memory_arena* arena = arenaInit(DEFAULT_ARENA_SIZE); |
|
|
|
|
RenderState* rs = initRenderState(arena); |
|
|
|
|
RenderState* rs = initRenderState(); |
|
|
|
|
|
|
|
|
|
if (!initGraphics(rs->handles)) |
|
|
|
|
return 1; |
|
|
|
|
@ -353,7 +351,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(arena, rs->xforms, &ubo, rs->gl_ctx); |
|
|
|
|
initTransforms(rs->asset_arena, rs->xforms, &ubo, rs->gl_ctx); |
|
|
|
|
|
|
|
|
|
if (!addShaders(rs)) { |
|
|
|
|
LOG(Error) << "error loading shaders\n"; |
|
|
|
|
|