|
|
|
@ -10,13 +10,15 @@ |
|
|
|
|
|
|
|
|
|
|
|
bool initGraphics(SDLHandles* handles); |
|
|
|
bool initGraphics(SDLHandles* handles); |
|
|
|
|
|
|
|
|
|
|
|
LightsBuffer* initLights(MemoryArena* arena, GLContext* gl_ctx, u32 max_lights); |
|
|
|
LightsBuffer* initLights(MemoryArena* arena, GLContext* gl_ctx, u32 max_lights, |
|
|
|
|
|
|
|
glm::vec4 ambient_color); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// interface
|
|
|
|
// interface
|
|
|
|
|
|
|
|
|
|
|
|
RenderState* |
|
|
|
RenderState* |
|
|
|
initRenderState(GLClearColor clear_col, |
|
|
|
initRenderState(GLClearColor clear_col, |
|
|
|
|
|
|
|
glm::vec4 ambient_color, |
|
|
|
u32 max_models, |
|
|
|
u32 max_models, |
|
|
|
u32 max_textures, |
|
|
|
u32 max_textures, |
|
|
|
u32 max_shaders, |
|
|
|
u32 max_shaders, |
|
|
|
@ -56,7 +58,8 @@ initRenderState(GLClearColor clear_col, |
|
|
|
assert(xforms_ubo); |
|
|
|
assert(xforms_ubo); |
|
|
|
initTransforms(rs->assets.arena, rs->xforms, xforms_ubo, rs->gl_ctx); |
|
|
|
initTransforms(rs->assets.arena, rs->xforms, xforms_ubo, rs->gl_ctx); |
|
|
|
|
|
|
|
|
|
|
|
rs->lights_buf = initLights(rs->rg_arena, rs->gl_ctx, max_lights); |
|
|
|
rs->lights_buf = initLights(rs->rg_arena, rs->gl_ctx, max_lights, |
|
|
|
|
|
|
|
ambient_color); |
|
|
|
|
|
|
|
|
|
|
|
bool ret = loadDefaultShaders(rs); |
|
|
|
bool ret = loadDefaultShaders(rs); |
|
|
|
assert(ret); |
|
|
|
assert(ret); |
|
|
|
@ -309,12 +312,16 @@ initGraphics(SDLHandles* handles) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
LightsBuffer* |
|
|
|
LightsBuffer* |
|
|
|
initLights(MemoryArena* arena, GLContext* gl_ctx, u32 max_lights) |
|
|
|
initLights(MemoryArena* arena, |
|
|
|
|
|
|
|
GLContext* gl_ctx, |
|
|
|
|
|
|
|
u32 max_lights, |
|
|
|
|
|
|
|
glm::vec4 ambient_color) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// FIXME: revisit for 'Scene' abstraction
|
|
|
|
// FIXME: revisit for 'Scene' abstraction
|
|
|
|
|
|
|
|
|
|
|
|
LightsBuffer* lb = ARENA_ALLOC(arena, LightsBuffer, 1); |
|
|
|
LightsBuffer* lb = ARENA_ALLOC(arena, LightsBuffer, 1); |
|
|
|
lb->buf_size = 8 * sizeof(u32) // NOTE: 'header'
|
|
|
|
lb->buf_size = 8 * sizeof(u32) // NOTE: 'header'
|
|
|
|
|
|
|
|
+ sizeof(glm::vec4) // NOTE: ambient color
|
|
|
|
+ 6 * max_lights * sizeof(glm::vec4); // NOTE: vector arrays
|
|
|
|
+ 6 * max_lights * sizeof(glm::vec4); // NOTE: vector arrays
|
|
|
|
LOGF(Debug, "buf_size: %d\n", lb->buf_size); |
|
|
|
LOGF(Debug, "buf_size: %d\n", lb->buf_size); |
|
|
|
lb->buffer = ARENA_ALLOC(arena, u8, lb->buf_size); |
|
|
|
lb->buffer = ARENA_ALLOC(arena, u8, lb->buf_size); |
|
|
|
@ -335,9 +342,14 @@ initLights(MemoryArena* arena, GLContext* gl_ctx, u32 max_lights) |
|
|
|
// in the future
|
|
|
|
// in the future
|
|
|
|
void* arr_start = arenaGetAddressOffset(lb->buffer, 8 * sizeof(u32)); |
|
|
|
void* arr_start = arenaGetAddressOffset(lb->buffer, 8 * sizeof(u32)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// NOTE: ambient color
|
|
|
|
|
|
|
|
lb->ambient_color = (glm::vec4*) arr_start; |
|
|
|
|
|
|
|
*lb->ambient_color = ambient_color; |
|
|
|
|
|
|
|
|
|
|
|
// NOTE: set offsets for array pointers
|
|
|
|
// NOTE: set offsets for array pointers
|
|
|
|
u32 arr_size = max_lights * sizeof(glm::vec4); |
|
|
|
u32 arr_size = max_lights * sizeof(glm::vec4); |
|
|
|
lb->pl_positions = (glm::vec4*) arr_start; |
|
|
|
lb->pl_positions = //(glm::vec4*) arr_start;
|
|
|
|
|
|
|
|
(glm::vec4*) arenaGetAddressOffset(arr_start, sizeof(glm::vec4)); |
|
|
|
lb->pl_colors = |
|
|
|
lb->pl_colors = |
|
|
|
(glm::vec4*) arenaGetAddressOffset(lb->pl_positions, arr_size); |
|
|
|
(glm::vec4*) arenaGetAddressOffset(lb->pl_positions, arr_size); |
|
|
|
lb->pl_intensities = |
|
|
|
lb->pl_intensities = |
|
|
|
|