Je suis en train de développer un moteur de jeu, et cela ne fonctionnera que sur du matériel moderne (modèle Shader 4+). Je suppose que, lorsque j'en aurai fini, ce ne sera pas une exigence aussi déraisonnable.
Ma question est: combien de textures puis-je lier à la fois sur une carte graphique moderne? 16 serait suffisant. Puis-je m'attendre à ce que la plupart des cartes graphiques modernes prennent en charge ce nombre de textures?
Ma GTX 460 semble prendre en charge 32, mais je ne sais pas si c'est représentatif de la plupart des cartes vidéo modernes.
Réponses:
Le nombre de textures pouvant être liées à OpenGL n'est pas 32 ou 16 . Ce n'est pas ce que vous obtenez
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);
. Cette fonction récupère le nombre de textures accessibles par le fragment shader .Vous voyez, chaque shader a sa propre limite du nombre de textures qu'il peut utiliser . Cependant, il existe également un nombre total de textures pouvant être utilisées, point final. Ceci est défini (en OpenGL) par
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
.Il y a donc deux limites: les textures par étape et les textures liées au total.
OpenGL 3.x définit le nombre minimum pour la limite par étape à 16, donc le matériel ne peut pas avoir moins de 16 textures par étape. Il peut avoir une limite plus élevée, mais vous savez que vous obtenez au moins 16. 3.x définit le nombre minimum pour les textures-total-bound comme 48. AKA: 16 * 3 étapes. De même, GL 4.x définit les nombres comme étant 16 textures par étape et 96 textures liées au total (soit 16 * 6 étapes, y compris les shaders de calcul).
Encore une fois, ce sont les nombres minimaux . Le matériel peut (et varie).
En ce qui concerne le matériel spécifique, vous pouvez vous attendre à ce que tout matériel de classe DX10 corresponde à ces chiffres. Le matériel de classe DX11 a une certaine variance; NVIDIA (GeForce 4xx +) et les puces AMD haut de gamme (alias: GCN-cores) peuvent avoir plus que les 16 par étage.
la source
Je crois que 32 est le nombre maximum de textures pouvant être liées actuellement. Pour autant que je sache, même la série 8800 avait 32 unités de texture.
Pour autant que je sache, pour le support openGL 4.x, vous aurez besoin d'une carte nvidia Fermi ou plus récente (ou carte amd correspondante), les modèles haut de gamme semblent tous avoir 32 unités, tandis que les cartes les plus basses (GT 430, par exemple) ) en ont 16. Cependant, en regardant les fiches techniques AMD, ils énumèrent des nombres comme 80 ou 128 unités de texture, mais répertorient 32 unités ROP couleur qui semblent être restées constantes à travers les générations.
Le GTX 480, d'autre part, est répertorié avec 60 unités de texture et 48 unités ROP, tandis que les cartes d'extrémité inférieure comme la 430 n'auraient que 16 unités de texture et 4 unités ROP. Donc, dans l'ensemble, je ne suis pas vraiment convaincu que ce soit le nombre que vous recherchez réellement.
Vous pouvez vérifier le nombre d'unités de texture disponibles pour le rendu de pipeline de fonction non fixe avec
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);
, cependant, donc si vous avez accès à un matériel diversifié, vous pouvez le vérifier vous-même.EDIT: ce site vous permet de comparer les capacités openGL signalées de toutes sortes de cartes vidéo, qui devraient vous donner les chiffres dont vous avez besoin: http://feedback.wildfiregames.com/report/opengl/device/GeForce%20GTX%20580
PS: AMD et nvidia ont récemment introduit des "textures sans reliure", (amd a un nom différent) qui vous permet d'utiliser un grand nombre de textures sans les lier à des unités textutre, pour le moment, cela n'est disponible qu'en openGL.
la source