Cela devrait être couvert par presque tous les tutoriels de texture pour OpenGL. Par exemple here, here et .
Pour chaque texture, vous devez d'abord avoir un nom de texture. Un nom de texture est comme un index unique pour une seule texture. Chaque nom pointe vers un objet de texture qui peut avoir ses propres paramètres, données, etc. glGenTextures est utilisé pour obtenir de nouveaux noms. Je ne sais pas s'il y a une limite en dehors de la plage d'uint (2^32). Si c'est le cas, vous obtiendrez probablement 0 pour tous les nouveaux noms de texture (et une erreur gl).
L'étape suivante consiste à lier votre texture (voir glBindTexture). Après cela toutes les opérations qui utilisent ou affectent les textures utiliseront la texture spécifiée par le nom de texture que vous avez utilisé comme paramètre pour glBindTexture. Vous pouvez maintenant définir les paramètres de la texture (glTexParameter) et télécharger les données de texture avec glTexImage2D (pour les textures 2D). Après avoir appelé glTexImage, vous pouvez également libérer la mémoire système avec vos données de texture.
Pour les textures statiques, tout ceci doit être fait une seule fois. Si vous voulez utiliser la texture, il vous suffit de la relier et d'activer la texturation (glEnable (GL_TEXTURE_2D)).
La taille (largeur/hauteur) d'une texture unique est limitée par GL_MAX_TEXTURE_SIZE. Ceci est normalement 4096, 8192 ou 16384. Il est également limité par la mémoire graphique disponible car il doit s'y intégrer avec d'autres ressources comme les tampons framebuffer ou vertex.Toutes les textures peuvent être plus grandes que la mémoire disponible, mais elles seront échangées.
Dans la plupart des cas, le pilote graphique doit décider quelles textures sont stockées dans la mémoire du système et lesquelles dans la mémoire graphique. Vous pouvez cependant donner une priorité plus élevée à certaines textures avec glPrioritizeTextures ou avec glTexParameter. Je ne m'inquiéterais pas trop de l'endroit où les textures sont stockées parce que le conducteur fait normalement un très bon travail avec cela. Les textures souvent utilisées sont également plus susceptibles d'être stockées dans la mémoire graphique. Si vous définissez une priorité qui est juste un "indice" pour le pilote sur l'importance pour la texture de rester sur la carte graphique. Il est également possible que la priorité soit complètement ignorée. Vous pouvez également vérifier où les textures sont actuellement avec glAreTexturesResident.
Voulez-vous créer des objets de texture ou des données pour les textures? –
Hey encore, je veux dire est-il un moyen de mettre en cache la texture DATA dans GPU, autre que d'envoyer toutes les données de la texture lorsque nous avons besoin de le dessiner? – Morpheus