Question

J'ai un nombre indéfini de contexte d'affichage et chacun affiche une texture. Lorsque j'appelle glGenTextures, le même nom est renvoyé dans tous les contextes d'affichage. Est-ce que ça va marcher? Même s'ils portent le même nom, vont-ils toujours stocker et afficher des textures différentes? Si non, que devrait-on faire pour contourner cela?

Était-ce utile?

La solution

Obtenir le même nom de glGenTexture et afficher la même texture n’est pas la même chose.

Les noms de texture ne sont que des entiers, à la discrétion du contexte. Ils commencent généralement par 1 et sont incrémentés de chaque glGenTexture, mais pas nécessairement. Une implémentation n'est pas obligée de fonctionner comme ça (bien que la plupart le fassent). Cependant, en théorie, vous pouvez également obtenir plus ou moins de "données aléatoires". nombre, par exemple un entier qui s’incrémente pour n’importe quel type d’objet (c’est-à-dire non seulement des textures, mais aussi des tampons et des shaders), ou même une adresse de pointeur 32 bits dans l’espace adresse du pilote, ou quelque chose d’autre. Il n'est pas nécessaire qu'un nom soit spécifique.

Dans l’ancien OpenGL, vous pouviez même créer vos propres noms au lieu d’utiliser glGenTexture, mais ce n’est plus légal. Je ne sais pas ce qu'ils pensaient quand cela a été autorisé, mais de toute façon ...:)

Le même numéro (nom) dans un contexte différent sera généralement une texture différente, voire aucune texture. Donc, si vous voyez la même texture dans un contexte différent avec le même nom de texture, vous avez soit des contextes partagés, soit le pilote est défectueux.

Notez que si vous utilisez wglCreateContextAttribsARB, le deuxième paramètre est le descripteur d'un contexte déjà existant (ou null). Si vous fournissez un descripteur de contexte ici, vous aurez des contextes partagés même sans appeler explicitement glShareLists. C’est peut-être ce qui s’est passé par accident.

Autres conseils

Les textures ne sont pas (par défaut) partagées entre les contextes - vous devez l'activer explicitement, mais la procédure est spécifique à la plate-forme.

Sur win32, il s'agit de wglShareLists et sur la plupart des autres plates-formes, il est spécifié lors de la création du contexte (par exemple, avec le paramètre share sur aglCreateContext sur OS-X).

À ma connaissance, je n'ai activé aucun partage de texture. Cependant, la même texture est affichée dans tous les contextes d'affichage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top