É seguro usar a função Sleep () no Windows no loop de jogo (C ++)? Eu quero ter uma taxa de quadros fixa.
É seguro usar a função Sleep () no Windows no loop de jogo (C ++)? Eu quero ter uma taxa de quadros fixa.
Respostas:
Não, não é. O sono garante apenas um tempo mínimo para dormir, mas ele pode realmente dormir por qualquer período arbitrário durante esse período. Sua resolução do timer (definida via timeBeginPeriod) também é importante para ela, e mesmo se você estiver usando outra coisa (como QueryPerformanceCounter) no seu timer, ainda precisará do timeBeginPeriod para controlar o sono.
Então, em resumo:
O único argumento razoável para usar o Sleep seria se você quisesse reduzir o uso da CPU para, por exemplo, dispositivos móveis. Mesmo assim, você usaria Sleep (1); usá-lo para controlar taxas de quadros não é o caminho a percorrer.
Forçar o vsync ativado é provavelmente uma maneira comum de obter uma taxa de quadros fixa, mas mesmo assim, um hardware diferente será executado em taxas de atualização diferentes e você não poderá ter uma taxa de quadros fixa consistente em máquinas diferentes (isso depende do tipo de hardware você está alvejando, é claro).
Neste momento, é necessário mencionar este artigo: Gaffer On Games - Fix Your Timestep! . Isso descreve as etapas necessárias para obter um passo consistente em sua simulação.
Resposta curta: não, não é.
Para ter uma taxa de quadros fixa, é necessário chamar uma determinada função de retorno de chamada que força uma taxa de quadros específica. Obviamente, se você não decidir quanto tempo uma única iteração em um loop levará, não poderá definir um tempo de suspensão fixo.
GLUT fornece glutTimerFunc () , que é, se você estiver programando no OpenGL, a função correta de que precisa. Dê uma olhada neste exemplo ou neste .
Sleep
?