Got screen fading to work in my game using my own coroutine system from scratch. this is the c code driving it
define_flat_coroutine(fade_screen_to_black, fcr_locals(int alpha_iteration;), ptr_type(Platform) platform) {
f32 dt = convert(f32, platform->time.delta_seconds);
fcr_begin({
system_color_pallete(COLOR_ID_FADER).x = (1021.0f / 1024.0f);
fcr->locals.alpha_iteration = 0;
});
for(; fcr->locals.alpha_iteration < 23; fcr->locals.alpha_iteration++) {
system_color_pallete(COLOR_ID_FADER).x -= (2.0f / 1024.0f);
fcr_wait_time(.05f, dt);
}
fcr_end();
}
...
flat_coroutine(fade_screen_to_black) screen_fader = flat_coroutine_setup(fade_screen_to_black);
//in the render function
//next any relevant UI
if(show_black_screen) {
//append the black screen
flat_coroutine_run_with_args(ref(screen_fader), platform);
ptr_type(Render_UI_Quad) r_quad = ui_quad_fixture_append_fixed_space_single(ui_fixture, ref(ui_quad_space), 1);
r_quad->sprite_attribs.z = -1.0f;
}
else if (reset_black_screen) {
screen_fader = flat_coroutine_setup(fade_screen_to_black); //just reset the coroutine
}