diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/renderer/renderer.cpp | 78 | ||||
-rw-r--r-- | source/renderer/renderer.h | 53 |
2 files changed, 72 insertions, 59 deletions
diff --git a/source/renderer/renderer.cpp b/source/renderer/renderer.cpp index 22eb333..4e51f91 100644 --- a/source/renderer/renderer.cpp +++ b/source/renderer/renderer.cpp @@ -85,7 +85,7 @@ u32 gl_shader_program_from_path(const char* vspath, const char* fspath) return shader_program; } -u32 gl_setup_colored_quad(u32 sp) +u32 gl_setup_quad(u32 sp) { // @todo: make this use index buffer maybe? r32 vertices[] = { @@ -112,44 +112,44 @@ u32 gl_setup_colored_quad(u32 sp) return vao; } -void gl_draw_colored_quad( - GLRenderer* renderer, +void gl_draw_quad( + GlQuad quad, + CameraOrtho *camera, Vec3 position, Vec2 size, Vec3 color ) { - glEnable(GL_DEPTH_TEST); - glUseProgram(renderer->cq_sp); - if (renderer->cq_init == 0) - { + glEnable(GL_DEPTH_TEST); + glUseProgram(quad.sp); + if (camera->update) { + glUniformMatrix4fv( + glGetUniformLocation(quad.sp, "Projection"), + 1, GL_FALSE, (camera->proj).buffer + ); + camera->update = 0; + } + // setting quad size + Mat4 model = diag4m(1.0); + Mat4 scale = scaling_matrix4m(size.x/2.0f, size.y/2.0f, 0.0f); + model = multiply4m(scale, model); + // setting quad position + Mat4 translation = translation_matrix4m(position.x, position.y, position.z); + model = multiply4m(translation, model); + // setting color + glUniform3fv(glGetUniformLocation(quad.sp, "Color"), 1, color.data); + glUniformMatrix4fv( - glGetUniformLocation(renderer->cq_sp, "Projection"), - 1, GL_FALSE, (renderer->cam_proj).buffer + glGetUniformLocation(quad.sp, "Model"), + 1, GL_FALSE, model.buffer ); - renderer->cq_init = 1; - } - // setting quad size - Mat4 model = diag4m(1.0); - Mat4 scale = scaling_matrix4m(size.x, size.y, 0.0f); - model = multiply4m(scale, model); - // setting quad position - Mat4 translation = translation_matrix4m(position.x, position.y, position.z); - model = multiply4m(translation, model); - // setting color - glUniform3fv(glGetUniformLocation(renderer->cq_sp, "Color"), 1, color.data); - - glUniformMatrix4fv( - glGetUniformLocation(renderer->cq_sp, "Model"), - 1, GL_FALSE, model.buffer - ); - - glUniformMatrix4fv( - glGetUniformLocation(renderer->cq_sp, "View"), - 1, GL_FALSE, (renderer->cam_view).buffer - ); - - glBindVertexArray(renderer->cq_vao); - glDrawArrays(GL_TRIANGLES, 0, 6); + + glUniformMatrix4fv( + glGetUniformLocation(quad.sp, "View"), + 1, GL_FALSE, (camera->view).buffer + ); + + glBindVertexArray(quad.vao); + glDrawArrays(GL_TRIANGLES, 0, 6); } void gl_setup_colored_quad_optimized( @@ -501,7 +501,7 @@ void gl_setup_text(TextState *uistate) { void gl_render_text( GLRenderer *renderer, char *text, - Vec2 position, + Vec3 position, Vec3 color, r32 font_size) { // render_text @@ -510,19 +510,19 @@ void gl_render_text( glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glUseProgram(renderer->ui_text.sp); - if (renderer->ui_cam_update) { + if (renderer->ui_cam.update) { glUniformMatrix4fv( glGetUniformLocation( renderer->ui_text.sp, "View"), - 1, GL_FALSE, renderer->ui_cam_view.buffer); + 1, GL_FALSE, renderer->ui_cam.view.buffer); glUniformMatrix4fv( glGetUniformLocation( renderer->ui_text.sp, "Projection"), - 1, GL_FALSE, renderer->cam_proj.buffer); + 1, GL_FALSE, renderer->ui_cam.proj.buffer); - renderer->ui_cam_update = 0; + renderer->ui_cam.update = 0; } glUniform3fv( glGetUniformLocation( @@ -569,7 +569,7 @@ void gl_render_text( r32 ypos = liney + (baseline - render_scale*render_char.bbox0.y); Mat4 sc = scaling_matrix4m(font_size, font_size, 1.0f); - Mat4 tr = translation_matrix4m(xpos, ypos, 0); + Mat4 tr = translation_matrix4m(xpos, ypos, position.z); Mat4 model = multiply4m(tr, sc); renderer->ui_text.transforms[running_index] = model; renderer->ui_text.char_indexes[running_index] = diff --git a/source/renderer/renderer.h b/source/renderer/renderer.h index 6d9b7f6..d0467db 100644 --- a/source/renderer/renderer.h +++ b/source/renderer/renderer.h @@ -36,20 +36,35 @@ struct TextState { TextChar* char_map; }; +struct GlQuad { + u32 sp; + u32 vao; +}; + +struct CameraOrtho { + b8 update; + Vec3 up; + Vec3 pos; + Vec3 look; + Mat4 view; + Mat4 proj; +}; + struct GLRenderer { - // colored quad b8 cq_init; - u32 cq_sp; - u32 cq_vao; + GlQuad quad; + // ui camera + CameraOrtho ui_cam; + // camera Vec3 preset_up_dir; Mat4 cam_proj; - // ui camera - b8 ui_cam_update; - Vec3 ui_cam_pos; - Vec3 ui_cam_look; - Mat4 ui_cam_view; + //b8 ui_cam_update; + //Vec3 ui_cam_pos; + //Vec3 ui_cam_look; + //Mat4 ui_cam_view; // game camera + CameraOrtho game_cam; b8 cam_update; Vec3 cam_pos; Vec3 cam_look; @@ -78,25 +93,23 @@ u32 gl_shader_program(char *vs, char *fs); u32 gl_shader_program_from_path(const char *vspath, const char *fspath); // ==================== QUADS ==================== -u32 gl_setup_colored_quad(u32 sp); -void gl_draw_colored_quad( - GLRenderer* renderer, - Vec3 position, - Vec2 size, - Vec3 color - ); +u32 gl_setup_quad(u32 sp); +void gl_draw_quad(GlQuad quad, + CameraOrtho camera, + Vec3 position, + Vec2 size, + Vec3 color); // batched renderer void gl_setup_colored_quad_optimized( GLRenderer* renderer, - u32 sp - ); + u32 sp); void gl_draw_colored_quad_optimized( GLRenderer* renderer, Vec3 position, Vec2 size, - Vec3 color - ); + Vec3 color); + void gl_cq_flush(GLRenderer *renderer); // ==================== LINE ==================== @@ -113,7 +126,7 @@ void gl_line_flush(GLRenderer *renderer); void gl_setup_text(TextState *uistate); void gl_render_text(GLRenderer *renderer, char *text, - Vec2 position, + Vec3 position, Vec3 color, r32 font_size); void gl_text_flush(GLRenderer *renderer, u32 render_count); |