Question

Je suis en train de faire une simple application 3D WebGL, dans lequel chaque objet qui est tiré a son propre attaché shader. Mais j'ai un problème étrange dans Firefox (en Chrome cela fonctionne parfaitement) dans lequel l'emplacement uniforme pour chaque matrice / sampler dans chaque shaders ne sont pas enregistrés correctement. Qui signifie que je dois appeler getUniformLocation pour chaque matrice que mon shaders utilise chaque fois que je change le shader en cours, ce qui me semble un gaspillage de peu.

tmp.pMatrixUniform = this.gl.getUniformLocation(tmp, "uPMatrix"); //perpesctive
tmp.mvMatrixUniform = this.gl.getUniformLocation(tmp, "uMVMatrix");  //world transform
tmp.samplerUniform = this.gl.getUniformLocation(tmp, "uSampler"); //texture sampler

return tmp;

Le code ci-dessus est l'endroit où je crée un shader et de le stocker pour une utilisation sur plusieurs objets. Je sais que la référence de l'objet shader tmp est stocké et modifié correctement, car juste au-dessus de ces lignes de I code d'économiser chaque emplacement d'attribut d'une manière similaire, qui n'a pas besoin d'être remis à zéro pour chaque changement d'un « shaders courant » .

Comme je l'ai dit, cela ne fonctionne pas seulement dans Firefox, qui me font croire magasin Firefox et Chrome endroits uniformes différemment. Est-ce que quelqu'un sait une autre façon de stocker ces valeurs pour que cela fonctionne dans les deux navigateurs, ne pas avoir à « re-get » eux pour toutes les images?

Était-ce utile?

La solution

Je résolu la question. Il se trouve que ce n'était pas un problème avec la fonction elle-même, mais le fait que quand je rattacherais toujours passer à un nouveau shaders, au lieu de lier le shader uniquement sur la création.

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