2010-12-04 3 views
0

J'essaye de faire une application 3D simple dans WebGl, dans laquelle chaque objet dessiné a son propre shader attaché. Mais j'ai un problème étrange dans Firefox (dans Chrome cela fonctionne parfaitement) dans lequel l'emplacement uniforme pour chaque matrice/échantillonneur dans chaque shader ne sont pas sauvegardés correctement. Signification Je dois appeler getUniformLocation pour chaque matrice que mon shader utilise chaque fois que je change le shader actuel, ce qui me semble un peu inutile.WebGl Uniformes valeur de retour

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 le stocke pour une utilisation sur plusieurs objets. Je sais que la référence de l'objet tmp shader est stockée et modifiée correctement, car juste au-dessus de ces lignes de code, je sauvegarde tous les attributs d'une manière similaire, ce qui n'a pas besoin d'être réinitialisé pour chaque changement de "shader courant" . Comme je l'ai dit, cela ne fonctionne pas seulement dans Firefox, ce qui me fait croire que Firefox et Chrome stockent différemment les emplacements uniformes. Est-ce que quelqu'un sait une autre façon de stocker ces valeurs de sorte qu'il fonctionne dans les deux navigateurs, ne pas avoir à les "ré-obtenir" pour chaque image?

+0

Je ne serais pas surpris si vous venez de découvrir le problème qui provoque mon application à afficher une seule image en FF4, avant de devenir noir. –

Répondre

2

J'ai résolu le problème. Il s'avère que ce n'était pas un problème avec la fonction elle-même, mais le fait que lors du passage à un nouveau shader, je le lierais toujours au lieu de lier le shader uniquement à la création.