2

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);
  • Here's an answer to the question you just asked that was closed (incorrectly, IMHO) and that you deleted: https://pastebin.com/DpJgmPDh Happy coding! Details about `.call` [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call). Details about arrow functions [here](https://stackoverflow.com/questions/34361379/are-arrow-functions-and-functions-equivalent-interchangeable) and in my book (see my profile). – T.J. Crowder Oct 28 '21 at 08:58

1 Answers1

2

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);
LJᛃ
  • 7,655
  • 2
  • 24
  • 35