59 votes

Est-il important d'appeler glDisableVertexAttribArray ()?

Je ne suis pas tout à fait clair sur la portée de l'activation de vertex attrib tableaux. J'ai plusieurs shader programmes avec différents nombres de vertex attributs. Sont - glEnableVertexAttribArray des appels locaux à un programme de shaders, ou global?

Droit maintenant, je suis l'activation de vertex attrib tableaux quand j'ai créer le programme de shaders, et jamais de les désactiver, et tout semble fonctionner, mais il me semble que je suis peut-être censé activer/désactiver eux juste avant/après le tirage des appels. Est-il un impact à cela?

(Je suis en WebGL, comme il arrive, nous sommes donc vraiment parler d' gl.enableVertexAttribArray et gl.disableVertexAttribArray. Je note également que le livre orange, OpenGL Shading Language, est assez peu utile au sujet de ces appels.)

48voto

datenwolf Points 85093

L'état de ce qui Vertex Attribut Tableaux sont activés peuvent être soit lié à un Sommet Objet Array (VAO), ou être global.

Si vous utilisez VAOs, alors vous devriez ne pas désactiver l'attribut des tableaux, comme ils sont encapsulés dans le VAO.

Cependant pour le sommet mondial de l'attribut de la matrice de l'état activé, vous devez désactiver eux, parce que s'ils sont activés OpenGL va essayer de lire à partir de tableaux, ce qui peut être lié à un pointeur non valide, qui peut soit bloquer votre programme si le pointeur est à l'adresse des clients de l'espace, ou d'élever une erreur OpenGL si elle souligne les limites de l'un lié Vertex Buffer Object.

15voto

gman Points 9074

WebGL n'est pas identique à OpenGL.

Dans WebGL, laisser les tableaux activés est explicitement autorisé tant qu'un tampon est attaché à l'attribut et (a) s'il est utilisé, il est suffisamment grand pour satisfaire l'appel de dessin ou (b) qu'il n'est pas utilisé.

Contrairement à OpenGL ES 2.0, WebGL n'autorise pas les tableaux côté client.

3voto

Adria Points 313

Pour webGL, je vais aller avec oui, il est important d'appeler gl.disableVertexAttribArray.

Chrome a été de me donner cet avertissement:

WebGL: INVALID_OPERATION: drawElements: attribs not setup correctly

Ce qui se passait lorsque le programme a changé pour une utilisation de moins que le nombre maximal d'attributs. Évidemment, la solution est de désactiver le solde non utilisé des attributs avant de dessiner.

Si tous vos programmes utilisent le même nombre d'attributs, vous pouvez ainsi obtenir loin avec l'appel de gl.enableVertexAttribArray une fois lors de l'initialisation. Sinon, vous aurez besoin de les gérer lorsque vous modifiez les programmes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X