M. Cubría
M. Cubría

Reputation: 63

WebGL texImage2D: Conversion requires pixel reformatting

this is my first question in this page since i dont find people with this error, I hope I explain myself in this question.

Mm having a problem with WebGl textures, I get the next error: Error: WebGL: texImage2D: Conversion requires pixel reformatting.

This happens here:

function initSueloTextures(gl, sueloParametros) {
  sueloParametros.textureSuelo = gl.createTexture();
  gl.bindTexture(gl.TEXTURE_2D, sueloParametros.textureSuelo);
  gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE,
          new Uint8Array([0, 0, 255, 255]));
  var sueloImage = new Image();
  sueloImage.onload = function() { handleTextureLoaded(gl, sueloImage, sueloParametros.textureSuelo); }
  sueloImage.src = "resources/marbletexture.png";
}



function handleTextureLoaded(gl, image, texture) {
  console.log("handleTextureLoaded, image = " + image);
  gl.bindTexture(gl.TEXTURE_2D, texture);
  gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA,
    gl.UNSIGNED_BYTE, image);
  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);
}

The error appears in the handleTextureLoaded texImage2D. I think the variables I use are not a problem because I changed them for another global ones I created to test it and the error still appears.

Im using the last version of Firefox.

Thank you for your time.

Upvotes: 2

Views: 4559

Answers (2)

pleup
pleup

Reputation: 917

It's not an error, despite the "Error" label. It's just a warning saying loading your image to texture will need some heavy cpu side pixel conversions. If you don't really have performance issues, just ignore it.

As we speak it's a WIP issue.

It's not an error, just a warning -> https://dxr.mozilla.org/mozilla-central/source/dom/canvas/TexUnpackBlob.cpp#316-318

For more infos,check out this thread: https://bugzilla.mozilla.org/show_bug.cgi?id=1246410

Upvotes: 4

user128511
user128511

Reputation:

What is the error? Check your browser's JavaScript console

If the image you're loading is not a power of 2 in both dimensions you'll get an error and a warning. One error when calling gl.generateMipmap because in WebGL1 you can't generate mips for non-power-of-2 textures. Also a warning when you try to render it because if you have a non-power-of-2 texture you have to set TEXTURE_MIN_FILTER to LINEAR or NEAREST otherwise it's unrenderable.

Powers of 2 are 1, 2, 4, 8, 16, 32, 64, 128, 256, etc...

Also btw it's probably more useful to use a comma instead of a plus with console.log

console.log("handleTextureLoaded, image =", image);

Instead of

console.log("handleTextureLoaded, image = " + image);

Compare the results:

js console

The reason is with a plus the image is converted to a string, concatenated with "handleTextureLoaded, image = " and then sent to console.log so all console.log sees is a single string. With the comma the actual image is sent to console.log and so console.log can do more magic

Upvotes: 4

Related Questions