void render_game(struct GameMemory *memory, struct Renderer *renderer, uint32 screen_width, uint32 screen_height) { struct GameState *game_state = (struct GameState *)memory->game_memory; struct RenderBuffer *render_buffer = (struct RenderBuffer *)memory->render_memory; float aspect_ratio = (float)screen_width / (float)screen_height; mat4 projection_matrix = mat4_orthographic(-game_state->camera.zoom/2.0f, game_state->camera.zoom/2.0f, -game_state->camera.zoom/2.0f / aspect_ratio, game_state->camera.zoom/2.0f / aspect_ratio, 0.0f, 1.0f); mat4 view_matrix = mat4_look_at(vec3_new(game_state->camera.position.x, game_state->camera.position.y, 0.0f), vec3_new(game_state->camera.position.x, game_state->camera.position.y, -1.0f), vec3_new(0, 1, 0)); mat4 view_projection_matrix = mat4_mul(projection_matrix, view_matrix); update_ubo(renderer->camera_ubo, sizeof(mat4), &view_projection_matrix); bind_program(renderer->line_program); draw_world_line_buffer(renderer, render_buffer, renderer->line_program); bind_program(0); bind_program(renderer->quad_program); draw_world_quad_buffer(&renderer->sprite_batch, render_buffer); bind_program(0); draw_buildings(game_state, renderer); draw_ships(game_state, renderer); draw_projectiles(game_state, renderer); view_projection_matrix = mat4_orthographic(0, screen_width, screen_height, 0, 0, 1); update_ubo(renderer->camera_ubo, sizeof(mat4), &view_projection_matrix); bind_program(renderer->quad_program); draw_screen_quad_buffer(&renderer->sprite_batch, render_buffer); bind_program(0); draw_frame_text_buffer(renderer, render_buffer); }
void model_renderer::rtt(const unsigned int& user_id) { update_ubo(user_id); r->start_draw(mesh_fbo); r->start_2d_draw(); r->clear(); static const GLenum draw_buffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 }; glDrawBuffers(2, draw_buffers); gl3shader shd = s->get_gl3shader("RTT_MESH"); shd->use(); shd->attribute_array("in_vertex", draw_vertices_vbo, 3); shd->attribute_array("in_normal", draw_normals_vbo, 3); shd->attribute_array("in_tex_coord", draw_tex_coords_vbo, 2); // additional ins/uniforms: shd->attribute_array("weights", bmodel->weights_vbo, 4); shd->attribute_array("bone_indices", bmodel->bone_indices_vbo, 4); shd->block("bone_data_buffer", bones_ubo); shd->uniform("offset", offset); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, draw_indices_vbo); glDrawElements(GL_TRIANGLES, (GLsizei)draw_index_count, GL_UNSIGNED_INT, nullptr); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); shd->disable(); r->stop_2d_draw(); r->stop_draw(); }