Domanda

Sto cercando di creare una semplice applicazione 3D in WebGL, in cui ogni oggetto disegnato ha il suo shader allegato. Ma ho uno strano problema in Firefox (in Chrome funziona perfettamente) in cui la posizione uniforme per ciascuna matrice/campionatore in ciascun shader non viene salvata correttamente. Significa che devo chiamare getunifortLocation per ogni matrice che il mio shader usa ogni volta che cambio lo shader attuale, che per me sembra un po 'dispendioso.

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;

Il codice sopra è dove creo uno shader e lo memorizzo per l'uso su più oggetti. So che il riferimento dell'oggetto shader TMP viene archiviato e modificato correttamente, perché proprio sopra queste righe di codice salvo ogni posizione dell'attributo in modo simile, che non deve essere ripristinato per ogni modifica di uno "shader di corrente" .

Come ho detto, questo non funziona solo in Firefox, il che mi fa credere in modo diverso Firefox e Chrome Store Uniform. Qualcuno sa un altro modo per archiviare questi valori in modo che funzioni in entrambi i browser, non doverli "ricominciare" per ogni frame?

È stato utile?

Soluzione

Ho risolto il problema. Si scopre che non è stato un problema con la funzione stessa, ma il fatto che quando passa a un nuovo shader, lo collegherei sempre invece di collegare lo shader solo alla creazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top