2017-06-26 4 views
0

Lorsque j'utilise glGenerateMipmap() pour générer une mipmap pour une texture RGBA32F, l'erreur INVALID_OPERATION est toujours générée. La texture de liaison ou la définition de plusieurs types de paramètres de texture ne fonctionnaient pas. De la spécification OpenGL ES 3.0, je trouve que RGBA32F n'est pas filtrable. Alors est-ce la raison de l'erreur?Problème avec le format de texture RGBA32F et le mipmapping avec OpenGL ES 3.0

Malheureusement, je ne trouve pas de conseils sur les "formats de texture pris en charge" dans les documents api de la fonction glGenerateMipmap. Si oui, alors pourquoi RGBA16F fonctionne bien, mais le flotteur 32 bits ne fonctionne pas?

grâce ~

Répondre

1

De l'OpenGL ES 3.0 specification, Section 3.8.10.5:

Si le tableau de levelbase n'a pas été spécifié avec un format interne non collé du tableau 3.3 ou un format interne de taille qui est à la fois couleur- Rendable et texture-filterable Selon la table 3.13, une erreur INVALID_OPERATION est générée. (souligné)

Vous avez déjà déclaré que RGBA32F n'est pas la texture filtrables alors que RGBA16F est, ce qui est la raison pour laquelle il travaille dans ce dernier cas, mais pas dans le premier.

également the docs mention que explicitement dans la liste des erreurs:

GL_INVALID_OPERATION est générée si le tableau de levelbaselevelbase n'a pas été spécifié avec un format interne non collé ou un format interne de taille qui est à la fois couleur renderable et la texture filtrables .

+0

oh, merci! J'ai lu cela, mais je ne l'ai pas bien compris. J'ai une confusion. Selon la déclaration, 'RGBA16F' (pas de couleur, mais filtrable) devrait également obtenir une erreur, mais en fait cela fonctionne? – zhy

+1

Certains GPU prennent en charge plus que les spécifications requises via des extensions ou prennent en charge des versions OpenGL ES plus récentes. OpenGL ES 3.2 nécessite RGBA16F pour être rendu et filtrable, et sera automatiquement activé pour un contexte 3.x si le pilote le supporte. Je suppose que votre contexte prend en charge tout ou partie d'OpenGL ES 3.2 (la plupart des nouveaux GPU sur le marché font). – solidpixel

+0

@solidpixel vous devriez avoir raison. Le résultat final diffère sur des matériels spécifiques. – zhy