web-dev-qa-db-fra.com

Qu'est-ce qui est si mauvais avec GL_QUADS?

J'entends ça GL_QUADS vont être supprimés dans les versions OpenGL> 3.0, pourquoi? Mes anciens programmes ne fonctionneront-ils pas à l'avenir? J'ai mesuré et GL_TRIANGLES ou GL_QUADS n'a pas de différence de vitesse de rendu (peut-être même que GL_QUADS est plus rapide). Alors à quoi ça sert?

63
Rookie

Le fait est que votre GPU affiche des triangles, pas des quads. Et il est assez trivial de construire un rectangle à partir de deux triangles, donc l'API n'a pas vraiment besoin d'être gênée par la possibilité de rendre les quads nativement. OpenGL passe par un processus de découpage majeur, coupant beaucoup de fonctionnalités qui avaient du sens il y a 15 ans, mais qui ne correspondent plus au fonctionnement du GPU, ni à la façon dont le GPU est toujours va fonctionner. Le pipeline de fonctions fixes a également disparu des dernières versions, je pense, car, encore une fois, il n'est plus nécessaire et ne correspond plus au fonctionnement du GPU (shaders programmables).

Le fait est que plus l'API OpenGL peut être plus petite et plus stricte, plus il est facile pour les fournisseurs d'écrire des pilotes robustes et hautes performances, et plus il est facile d'apprendre à utiliser l'API correctement et efficacement.

Il y a quelques années, pratiquement tout dans OpenGL pouvait être fait de 3 à 5 façons différentes, ce qui imposait beaucoup de travail au développeur pour déterminer quelle implémentation est la bonne si vous voulez des performances optimales.

Ils essaient donc de rationaliser l'API.

83
jalf

Les gens ont déjà très bien répondu à votre question. En plus de leur réponse, l'une des raisons pour lesquelles GL_QUADS la dépréciation est due à la nature indéfinie des quads.

Par exemple, essayez de modéliser un carré 2D avec des points (0,0,0), (1,0,0), (1,1,1), (0,1,0). C'est un quad plat avec un coin tiré vers le haut. Il est impossible de dessiner un carré plat NORMAL de cette manière. Selon les pilotes, il sera divisé en 2 triangles d'une manière ou d'une autre - ce que nous ne pouvons pas contrôler. Un tel modèle DOIT être modélisé avec deux triangles. - Les trois points d'un triangle se trouvent toujours sur un même plan.

9
yaMum

Ça ne va "rien". Comme avec beaucoup d'autres fonctionnalités, GL_QUADS a été déconseillé dans la version 3.0 et supprimé dans la version 3.1. Évidemment, tout cela n'est pas pertinent si vous créez un contexte de compatibilité.

Toute réponse que n'importe qui pourrait donner pour la raison de leur dépréciation serait une pure spéculation.

8
Nicol Bolas