2012-12-10 2 views
0

J'appelle glTexImage2D avec un niveau de paramètre = 0. Puis j'appelle glGenerateMipmap (GL_TEXTURE_2D). Que se passe-t-il avec GL_TEXTURE_BASE_LEVEL et GL_TEXTURE_MAX_LEVEL? Je suppose qu'ils sont définis automatiquement la façon suivante:comment fonctionne glGenerateMipmap?

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, mipmapsCount - 1); 

Plus tard, je peux définir les paramètres ci-dessus manuellement et par exemple réduire le niveau max. Est-ce correct ?

Répondre

1

Les valeurs GL_TEXTURE_BASE_LEVEL et GL_TEXTURE_MAX_LEVEL de la pile mipmap sont dérivées comme vous le mentionnez. Ces valeurs définissent la plage de niveaux de mipmap requise pour ce que l'on appelle la complétude de la texture. Lorsque vous demandez à OpenGL de générer des mipmaps automatiquement en utilisant glGenerateMipmap, la pile entière est remplie. Si vous utilisez glTextureStorage pour spécifier le nombre de niveaux, GL_TEXTURE_MAX_LEVEL est défini sur un niveau inférieur au niveau maximal fourni dans l'appel.

Vous avez également raison de modifier les niveaux de base et max après avoir construit la pile de mipmap, mais si OpenGL construit la pile mipmap, je ne pense pas que cela vous rapportera beaucoup. Si je me souviens bien, vous modifieriez les niveaux de base et max lorsque vous chargiez les mipmaps (en appelant à plusieurs reprises glTexImage* et en incrémentant le paramètre niveau) afin de ne pas avoir à charger la pile mipmap entière (vous pourriez faites ceci pour sauvegarder la mémoire de texture, ou peut-être pour avoir un meilleur contrôle sur l'échantillonnage pour des niveaux plus élevés [c'est-à-dire des plus petits mipmaps dans la pile]). Vous pouvez également utiliser GL_TEXTURE_MIN_LOD et GL_TEXTURE_MAX_LOD pour contrôler les mipmaps de la pile mipmap utilisés pour la texturation. La raison de ceci était de permettre le chargement asynchrone des niveaux de mipmap pendant la texturation.