text: function cargarImagenes(nombresArchivos,evExito){
    let ret={};
    let cargadas=0;
    nombresArchivos.forEach(function(n){
      cargarImagen("imagenes/"+n,function(i){
        ret[n]=i;
        cargadas+=1;
        if(cargadas==nombresArchivos.length){
          evExito(ret);
        }
      });
    });
  }
  
  function cargarImagen(nombreArchivo,evExito){
    let imagen = new Image();
    imagen.src = nombreArchivo;
    imagen.onload = function(){
      evExito(imagen);
    };
  }
  const atlasTexturas=(function(){
  
    function Textura(imagen,gl){
      let textura = gl.createTexture();
      gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
      gl.bindTexture(gl.TEXTURE_2D, textura);
      gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, imagen);
      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
      gl.generateMipmap(gl.TEXTURE_2D);
      gl.bindTexture(gl.TEXTURE_2D, null);
      textura.width=imagen.width;
      textura.height=imagen.height;
      textura.nombre=imagen.src;
  
      Object.freeze(textura);
  
      return textura;
    }
  
    let yo={};
    let gl=null;
    let texturas={};
    yo.configurarGl=function(nGl){
      gl=nGl;
    }
  
    yo.cargarTexturas=function(nombresArchivos,evExito){
      cargarImagenes(nombresArchivos,function(imagenes){
        nombresArchivos.forEach(function(n){
          texturas[n]=new Textura(imagenes[n],gl);
        });
        Object.freeze(texturas);
        evExito();
      })
    }
  
    yo.t=function(n){
      return texturas[n];
    }
  
    Object.freeze(yo);
  
    return yo;
  })();
  