#pragma once #include // Fiber minimalista sobre el suport natiu del SO (ucontext_t en POSIX, // Fibers API en Windows). Serveix per a implementar un yield/resume // cooperatiu entre el Director i el codi del joc sense un std::thread // ni mutex/condition_variable. Substituïx el bloqueig de publishFrame/ // consumeFrame amb un mecanisme de control explícit. // // Contracte: // - GameFiber::init(entry) prepara un fiber que executarà `entry` // en un stack dedicat. No el comença a executar encara. // - GameFiber::resume() cedeix el control al fiber. Retorna quan el // fiber crida GameFiber::yield() o quan la funció entry retorna. // - GameFiber::yield() es crida des de dins del fiber per a tornar // el control al main (al punt just després de resume()). // - GameFiber::is_done() indica si la funció entry ha retornat. // - GameFiber::destroy() allibera el stack i reinicia l'estat. // // Per al port a emscripten (Fase 7) caldrà substituir aquesta capa per // Asyncify, però el contracte públic pot romandre idèntic. namespace GameFiber { using EntryFn = void (*)(); void init(EntryFn entry, std::size_t stack_size = 256 * 1024); void destroy(); void resume(); void yield(); bool is_done(); bool is_initialized(); } // namespace GameFiber