J'essaye de réaliser quelque chose de similaire en partageant un context OpenGL entre plusieurs clients. (pour un jeu)
J'ai tout d'abord deux choix qui s'offrent à moi:
- intercepter tous les calls opengl et les regrouper dans une liste à envoyer à la fin de chaque frame (et donc laisser les autres clients les exécuter ensuite également)
- Faire un screenshot à chaque frame et l'envoyer aux clients
Etant donné la complexité de la première méthode je suis actuellement en train de faire des tests avec la seconde, actuellement j'arrive à obtenir ce screenshot en 2-5ms, puis +3/4ms pour la compression Zstd et +4ms pour la décompression, ce qui me fait en tout ~14ms de délai, est-ce raisonnable sachant que je souhaite délivrer 60 fps ? En y rajoutant le ping ça me parait injouable...
Comment fonctionne les services déjà existants ? J'entends parler de compression vidéo (H.264) mais que contient cette vidéo ? La frame précédente et celle nouvellement générée ? Ce qui voudrait dire un décalage de minimum 1 frame entre le serveur et clients ?
Etant donné que je souhaite intégrer cette fonctionnalité, je peux très bien me concentrer sur la première méthode en récupérant toutes les instructions OpenGL que je renvoie aux clients, est-ce plus logique étant donné ce que je souhaite en faire ? (Je suppose que ça demanderait aussi moins de bandwidth, ce qui m'arrange)
Message édité le 03 mai 2019 à 08:09:09 par JeanAsk