+ if(!cur_part) return;
+
+ part_time = time_msec - cur_part->start_time;
+ if(part_time < cur_part->in_time) {
+ float t = (float)part_time / cur_part->in_time;
+
+ if(prev_part) {
+ long prev_part_time = time_msec - prev_part->start_time;
+ if(prev_part->draw_out) {
+ prev_part->draw_out(prev_part_time, t);
+ } else {
+ prev_part->draw(prev_part_time);
+ }
+ }
+
+ if(cur_part->draw_in) {
+ cur_part->draw_in(part_time, t);
+ } else {
+ cur_part->draw(part_time);
+ }
+ } else {
+ prev_part = 0;
+ cur_part->draw(part_time);
+ }
+
+ /* no-srgb gamma correction fallback */
+ if(!opt.srgb) {
+ glBindTexture(GL_TEXTURE_2D, post_fbtex[0].id);
+ glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, win_width, win_height);
+
+ glUseProgram(sdr_gamma);
+ overlay_tex(post_fbtex, 1.0);
+ }
+
+ {
+ static long frames, prev_upd, fps;
+ long dt;
+
+ frames++;