C'est une mauvaise idée dans la mesure où elle est absurde. Il n'y a rien à "configurer" que vous n'ayez pas déjà fait, à part une matrice de projection ortho (que vous devrez faire de toute façon).
La portabilité n'est probablement pas un problème, bien qu'elle devrait l'être. Les IHV semblent très réticents à abandonner la prise en charge du mode immédiat dans un avenir prévisible (il semble "fonctionner correctement" même dans les profils de base), donc bien que le mode immédiat ait dû disparaître il y a longtemps, il restera probablement pour toujours. La performance est une autre histoire. Voulez-vous vraiment que quelque chose qui représente 0,1% de la complexité de la scène consomme 15 à 20% du temps CPU - les appels GL sont relativement légers, par exemple DX, mais ils ne sont pas gratuits - et 15 à 20% des temps réel de trame dû au blocage du pipeline? Pouvez-vous même vous le permettre avec votre budget temps? La plupart des jeux ne le peuvent pas.
Et puis bien sûr, les bizarreries. Oh les bizarreries. La beauté apparente du mode immédiat est qu'il est (apparemment) facile et direct de faire quelque chose comme dessiner rapidement quelques quads. En réalité, le mode immédiat peut être une telle douleur à l'arrière, il est tellement plein d'embûches non évidentes.
D'un autre côté, il est tout aussi facile (et plus simple si vous me le demandez!) D'écrire simplement une petite fonction 5-LOC DrawQuad
qui, lorsqu'elle est appelée, ajoute des coordonnées de sommet et des index dans un tampon de mémoire et incrémente un compteur. Avec qui, surprise, vous pouvez ensuite dessiner glDrawArrays/Elements
et que vous pouvez réutiliser (la copie GPU, pas seulement la copie utilisateur!) La prochaine image telle quelle tant que rien n'est changé.
Le mode immédiat doit, il n'y a pas d'autre moyen, allouer un tampon et effectuer un transfert PCIe à chaque fois. Ou, quelque chose d'équivalent en latence (GPU lisant la mémoire principale sur le bus, peu importe). Le pilote ne peut pas savoir (ou supposer) que les données sont restées exactement les mêmes que l'image précédente.
Le transfert de données vers le GPU est une opération à grande vitesse, mais aussi à latence élevée . Non seulement le transfert de bus en soi est un protocole compliqué à latence élevée (plusieurs couches de protocole, mise en paquets, accusés de réception, etc.), mais tous les GPU ne sont même pas capables de transférer et de dessiner en même temps, ou s'ils peuvent le faire , ils peuvent ne pas être en mesure à tout moment de basculer entre ou de lancer de nouvelles opérations librement tout en faisant quelque chose de différent. Lire comme suit : Tu ne transféreras pas en vain .