J'ai une scène WebGL et un ensemble de paramètres que je peux utiliser pour équilibrer la qualité du rendu et la vitesse. Je voudrais afficher la scène à l'utilisateur aussi haut que je peux faire de la qualité, tant que la fréquence d'images ne tombe pas en dessous de certains seuils à cause de cela. Pour y parvenir, je dois en quelque sorte mesurer la fréquence d'images "actuelle" en réponse aux changements de qualité.Mesure du temps de rendu
Mais la scène est statique tant que l'utilisateur n'interagit pas avec lui (comme une caméra rotative à l'aide de la souris). Je ne veux pas avoir une boucle qui restaure la même scène tout le temps même si rien ne change. Je veux arrêter le rendu si la scène s'arrête de bouger. Ce qui signifie que je ne peux pas simplement faire la moyenne du temps entre les images successives, car je n'arrive pas à faire la différence entre le rendu lent et le déplacement lent de la souris.
J'ai pensé à rendre la scène plusieurs fois au démarrage, et à en juger par la vitesse d'image. Mais la complexité de la scène peut changer au fil du temps, en raison de la partie de la scène visible à partir de la position actuelle de la caméra, ou en raison de l'interaction de l'utilisateur en dehors de la toile. Je dois donc adapter la qualité car la scène change de complexité. Exécuter une boucle d'étalonnage après chaque lancement de souris serait peut-être une option.
J'ai également pensé à utiliser l'appel finish
au lieu de l'appel flush
pour mesurer avec précision le temps de rendu. Mais pendant que j'attends que GL finisse le rendu, mon application ne répondra essentiellement pas, en particulier ne pourra pas mettre en file d'attente les événements de la souris. Puisque j'imagine que le rendu occuperait idéalement tout le temps entre deux images à la fréquence d'image du seuil cible, ce serait probablement plutôt mauvais. Je pourrais sortir avec l'utilisation finish
au lieu de flush
seulement dans quelques occasions, comme après une version de souris. Quelle est la meilleure façon d'obtenir la fréquence d'images souhaitée dans une application WebGL ou de mesurer régulièrement l'heure du rendu? Pourquoi ne pouvez-vous pas utiliser le temps de rendu moyen?
FYI: [la finition est juste une couleur en chrome] (http://stackoverflow.com/a/20810521/128511). – gman
@gman: Il va une idée ... merci beaucoup pour cette référence! – MvG