Pregunta

Estoy tratando de hacer una aplicación 3D simple en WebGL, en la que cada objeto que se dibuja tiene su propio sombreador adjunto. Pero tengo un problema extraño en Firefox (en Chrome esto funciona perfectamente) en el que la ubicación uniforme para cada matriz/muestra en cada sombreador no se guardan correctamente. Lo que significa que tengo que llamar a Getuniformlocation para cada matriz que mi sombreador usa cada vez que cambie el sombreador actual, lo que para mí parece un poco derrochador.

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;

El código anterior es donde creo un sombreador y lo guardo para usar en varios objetos. Sé que la referencia del objeto TMP Shader se almacena y se modifica correctamente, porque justo encima de estas líneas de código guardo cada ubicación de atributo de manera similar, que no es necesario restablecer para cada cambio de un "sombreador actual" .

Como dije, esto no funciona solo en Firefox, lo que me hace creer que Firefox y Chrome almacenan ubicaciones uniformes de manera diferente. ¿Alguien sabe otra forma de almacenar estos valores para que funcione en ambos navegadores, no tener que "volver a ajustarlos" para cada cuadro?

¿Fue útil?

Solución

Resolví el problema. Resulta que no era un problema con la función en sí, sino el hecho de que al cambiar a un nuevo sombreador, siempre lo vinculaba en lugar de vincular el sombreador solo en la creación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top