Question

Dans mon livre OpenGL, il dit ceci:

  

"Ce qui arrive souvent sur un tel système est que le cadre est trop compliqué   dessiner en 1/60 secondes, de sorte que chaque trame est affiché plus d'une fois. Si, pour   par exemple, il faut 1/45 seconde pour dessiner un cadre, vous obtenez 30 images par seconde, et   graphiques sont inactifs pendant 1/30 1/45 = 1/90 seconde par trame, soit un tiers de   le temps ».

Dans la phrase qui dit « il faut 1/45 seconde pour dessiner un cadre, vous obtenez 30 images par seconde », pourquoi dois-je obtenir seulement 30 fps? Woudln't 45 images par seconde plus correct?

Était-ce utile?

La solution

La carte graphique sera normalement tampon d'une trame avant.

Si cela prend 1/45 d'une seconde pour dessiner un cadre, puis au 1/60 d'une seconde marque, sera réaffichée l'image précédente. A la marque 1/45, l'image suivante est fait - mais la carte ne dispose pas d'un tampon libre pour commencer à rendre la suivante, donc doit rester au repos jusqu'à 1/30, où il peut envoyer ce cadre et commencer à travailler sur la suivante.

est avec VSync activé - si vous désactivez, au lieu d'obtenir le framerate 30fps et une carte de repos 1/3 du temps, la carte va commencer immédiatement redessiner, et vous aurez l'écran déchirer à la place

Autres conseils

Il est exact. Vous obtiendrez 45 images par seconde, mais pour obtenir un framerate lisse 60Hz (60 redessine par seconde) surveille le système ralentit vers le bas à 30 images par seconde,.

Parce que vous besoin pour dessiner quelque chose toutes les 1/60 secondes sur un écran de 60 Hz, et ne peut pas dessiner un « demi-cadre », vous devez dessiner la < em> précédent cadre . Donc, si vous 60 fois par seconde vous dessinez une fois le cadre réel, et tous les 2 cadres vous dessinez l'ancien, alors vous obtenez 30fps, malgré le fait que vous pouvez gérer 45fps.

Alors oui, comme d'autres l'ont dit, cela est dû à vos graphiques en attente de v-sync avant de commencer à générer l'image suivante.

Cela dit ...

Prenez garde, tous les moniteurs de rafraîchissement à 60 Hz. 60fps contre 30fps devient 70fps vs 35fps sur un écran de 70 Hz.

Si vous ne voulez pas obtenir votre carte d'attendre la v-sync avant de commencer image suivante, mais toujours éviter la déchirure, utilisez triple mise en mémoire tampon. Le GPU alors ping-pongs rendu à 2 tampons tandis que le 3ème est affiché. L'événement v-synchronisation est ce qui déclenche l'échange à la « actuellement terminé » back buffer. Ce n'est pas encore vraiment super, parce que vous vous retrouvez avec des images qui restent à l'écran plus souvent que d'autres: avec votre 1/45 rendu, un cadre reste pour 1/30 et l'autre pour 1/60, donnant quelques saccades .

Enfin, avec l'avènement du rendu offscreen (le rendu des tampons non affiché), il est théoriquement possible pour un pilote de ne pas attendre la v-sync avant de commencer l'image suivante, si les premiers travaux de ce cadre suivant il arrive de ne pas toucher la surface d'affichage. Je ne pense pas que je l'ai jamais vu un pilote qui soit intelligent bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top