Minha primeira contribuição para a Raylib
Recentemente abri uma Pull Request adicionando suporte experimental a iOS(a única plataforma que não tinha suporte) na raylib
O ponto mais interessante da implementação foi adaptar o modelo clássico de game loop usado em desktop para a arquitetura orientada a lifecycle/callbacks do iOS.
Em plataformas desktop, engines normalmente controlam completamente a execução da aplicação:
// initialzation + resources
while (!WindowShouldClose())
{
// update + draw
}
// cleanup + shutdown
No iOS, esse modelo não funciona da mesma forma.
A aplicação é controlada pelo UIKit/UIApplication, onde o sistema operacional gerencia o lifecycle, eventos, scenes/views e o próprio render scheduling. Ou seja: a plataforma “possui” o loop principal, essa implementação exigiu criar uma camada de compatibilidade para preservar a experiência tradicional da API da Raylib enquanto a execução real acontece dentro da infraestrutura do iOS.
Alguns pontos envolvidos:
• adaptação da main() tradicional para o modelo esperado pelo UIKit
• integração com UIApplication lifecycle
• gerenciamento de render/update callbacks
• sincronização com o frame scheduling do sistema
• suporte para simulator + physical devices
• ajustes de platform layer/window handling
Foi uma experiência muito interessante trabalhando com arquitetura cross-platform, runtime lifecycle e diferenças fundamentais entre desktop/game loops e plataformas mobile modernas.
Apesar de ainda ser uma POC experimental e existirem problemas arquiteturais em discussão na PR entre o modelo de execução desktop e o lifecycle do iOS,
o processo tem sido muito interessante do ponto de vista deo runtime lifecycle e cross-platform.