user16657004
user16657004

Reputation:

JavaScript DOM image preload

https://webgl2fundamentals.org/webgl/lessons/webgl-3d-textures.html

In the link above, I have to create a new image and after loading I have to send it to the buffer.

var image = new Image();
image.src = "resource/1.png";
image.onload = ()=>{
  gl.bindTexture(gl.TEXTURE_2D, texture);
  gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
  gl.generateMipmap(gl.TEXTURE_2D);
}

How to preload an image and use it?

var image = "data";

gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
gl.generateMipmap(gl.TEXTURE_2D);

Upvotes: 2

Views: 133

Answers (1)

LJᛃ
LJᛃ

Reputation: 8123

You could use an async function for this:

async function loadImage(src) {
  const image = new Image();
  image.src = src;
  return new Promise((resolve,reject)=>{
    image.onload = ()=>resolve(image);
    image.onerror = ()=>reject(new Error(`Failed to load image at "${src}"`));
  });
}

let img = await loadImage("resource/1.png");
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, img);
gl.generateMipmap(gl.TEXTURE_2D);

Upvotes: 2

Related Questions