Je cherche une manière portable de faire un SwapBuffers non bloquant() même si VSync est activé.
En d'autres termes, est-il possible d'être averti par un événement ou de connaître le retard jusqu'au prochain VSync?SwapBuffers non bloquant() avec VSync = sur
Répondre
IIRC aide cette extension: http://www.opengl.org/registry/specs/SGI/video_sync.txt, mais elle est très mal supportée par les pilotes actuels.
Malheureusement vous avez raison, cette fonctionnalité est très mal supportée. –
Premièrement, pourquoi n'appelez-vous pas simplement SwapBuffers() au début de la trame? Ou changer en quelque sorte le pipeline à
Render();
Update(); //Update before swapping buffers
SwapBuffers();
Alors que OpenGL travaille loin à toutes les commandes que vous venez jetai à, vous pouvez faire tout votre logique de mise à jour.
Sinon, il existe plusieurs façons de résoudre ce problème.
Je sais que XNA a une propriété ScanLine, qui vous indique la ligne de balayage à laquelle l'écran est actuellement actif. Je ne sais pas si OpenGL l'expose aussi, mais je suis sûr qu'il le faut. (Droite?)
Utiliser le rendu multithread. De nombreux moteurs modernes dédient un fil entier juste pour le rendu. Si ça bloque, ça va, ça ne dérange pas le fil principal. Alternallavly un moyen plus simple est de gérer simplement les entrées etc. sur un nouveau thread, cela évite les complications avec les contextes graphiques.
Utilisez triple buffering. L'utilisation de la triple bufférisation signifie que vous avez 2 tampons arrières. Une fois que vous appelez SwapBuffers, l'écran peut continuer à balayer le tampon avant, avec votre tampon nouvellement terminé, et le troisième tampon pour vous permettre de rendre l'image suivante. Bien sûr, si vous avez déjà prérendu deux images, SwapBuffers() bloquera.
- 1. temporisateur bloquant/non bloquant dans C
- 2. Java Non-bloquant Lecture
- 3. Socket non bloquant
- 4. OpenCV 'cvQueryFrame' non bloquant sur OS X?
- 5. Problème avec fifo non bloquant dans bash
- 6. SwapBuffers plante mon programme!
- 7. fichier non-bloquant openat()
- 8. tcp non bloquant se connecter avec epoll
- 9. Getch(), non bloquant, ncurses
- 10. Non bloquant pthread_join
- 11. Appel non-bloquant vs select()
- 12. IO non bloquant pour Android
- 13. CAS et compteur non bloquant
- 14. Serveur Web non bloquant sur .Net pour les applications Comet
- 15. Clavier non bloquant sur WinCE accédant au clavier virtuel
- 16. Comment activer vsync dans DirectX10
- 17. Intel GMA 4500HD et vsync
- 18. Comment construire un serveur TCP non bloquant avec cryptage ssl
- 19. Avoir quelques problèmes avec mon Javascript non-bloquant
- 20. Curses - Effectuer un contrôle non bloquant sur stdin - C
- 21. Achèvement de sendfile() sur un socket non bloquant
- 22. Phusion Passenger Pas toujours non bloquant avec des rails?
- 23. Tube non bloquant utilisant du popen?
- 24. Est-ce que fwrite est non-bloquant?
- 25. comment faire non bloquant accept() en Python?
- 26. Capture d'écran rapide et perte de Vsync
- 27. Erreur 10035 sur un socket bloquant
- 28. Postgres: Post-instruction (ou insertion) traitement asynchrone et non bloquant
- 29. En utilisant web.py comme serveur http non bloquant
- 30. Validation des données reçues dans un serveur non bloquant
Cela va être spécifique à la plate-forme, si c'est possible. Veuillez donc spécifier votre plateforme, en taguant au moins. – unwind
Je voudrais trouver un moyen portable pour implémenter cette fonctionnalité (Win32/Linux/MacOSX) –
comment le délai jusqu'à ce que le prochain vsync vous aide? Ce n'est pas comme si l'appel swapbuffer faisait l'échange au moment de l'appel. – Bahbar