Em todos os exemplos de código que eu observei, o loop do jogo se parece com isso:
while(true)
{
InputAndUpdate();
Draw();
SwapBuffers();
}
No entanto, isso não destrói o paralelismo entre a CPU e a GPU? Após a chamada dos buffers de troca, a GPU ficará ociosa enquanto a CPU estiver lidando com entradas e atualizações. Então, quando a CPU terminar de emitir comandos de desenho, aguarda até que a GPU termine de renderizar. Por que não é feito assim? :
while(true)
{
Draw(); //First issue the draw commands
InputAndUpdate(); //Update while the GPU is busy rendering
SwapBuffers(); //Now block and wait for the GPU to finish
}