Estaba leyendo a través de la documentación de DirectX y encontré algo interesante en la página de IDirect3DDevice9::BeginScene:DirectX: orden de bucle de juego, dibujar primero y luego manejar la entrada?
Para habilitar el paralelismo máximo entre la CPU y el acelerador de gráficos, es ventajoso para llamar IDirect3DDevice9 :: EndScene hasta antes de llamar al presente como sea posible.
He estado acostumbrado a escribir mi bucle de juego para manejar la entrada y tal, luego dibujar. ¿Lo tengo al revés? Tal vez el bucle de juego debe ser de la misma familia: (semi-pseudocódigo, obviamente)
while(running) {
d3ddev->Clear(...);
d3ddev->BeginScene();
// draw things
d3ddev->EndScene();
// handle input
// do any other processing
// play sounds, etc.
d3ddev->Present(NULL, NULL, NULL, NULL);
}
De acuerdo con esa frase de la documentación, este bucle podría "permitir paralelismo máxima".
¿Esto se hace comúnmente? ¿Hay algún inconveniente para ordenar el bucle del juego de esta manera? No veo ningún problema real después de la primera iteración ... Y sé que la mejor manera de saber el aumento real de velocidad de algo como esto es compararlo realmente, pero ¿alguien más ya lo ha intentado y puedes dar fe de cualquier real aumentar la velocidad?
No tengo experiencia en DirectX (XNA dev), pero sé que esto probablemente provocará una sensación levemente "laggy" en el juego ya que las cosas se dibujarán antes de que su juego se adelante y se actualice con la nueva entrada suministrada. – RCIX
@RCIX Ver mi respuesta –