Antes que nada avisar de que es un esbozo, una cosa en constante evolución y como tal, seguro que sufrirá cambios o mejor dicho añadidos en un futuro.
Dicho lo anterior, aquí podéis ver el bucle de programa del actual engine que estoy haciendo, que es la versión 2 del iL-engine.
MSG msg;
memset( &msg, 0, sizeof(msg) );
while( msg.message!=WM_QUIT && bRunAplication)
{
while(PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ))
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
EventProcess();
bRunAplication = Update(m_UpdateClock.GetElapsedTime());
m_KeyB.Update(m_KeyBClock.GetElapsedTime());
m_Mouse.Update(m_MouseClock.GetElapsedTime());
m_pCameraActive->Update();
Render(m_RenderClock.GetElapsedTime());
}
Como podeis observar, mientras no nos venga un mensaje de WM_QUIT o la función Update(…) nos devuelva un false, el bucle mira todos los mensajes de Windows que han llegado, los traslada todos a la función WinProc(…) donde son convertidos de mensajes de Windows a eventos de iL-engine y deja paso a la función que procesa todos los eventos.
A continuación podemos observar cómo se ejecuta la función Update(…), que es una función virtual para que, al ser heredado el motor, el usuario tenga un punto de entrada y control.
Updateamos los trackers de mouse y teclado, actualizamos la cámara y ya podemos renderizar este frame.
Y como no, vuelta a empezar.
Un saludo