Pregunta

I have worked a lot with webgl allready but now its the first time using dart and ive run into a weird error. I create a default texture like this:

  GlTexture() {
    mTexture = gl.createTexture();
    updateMemory(1, 1, new Uint8List.fromList([0x00, 0x00, 0xFF, 0xFF]));
  }

where updateMemory makes:

  void updateMemory(int width, int height, Uint8List colors, [ bool genMipMaps = true ]) {
    gl.bindTexture(TEXTURE_2D, mTexture);
    gl.texImage2DTyped(TEXTURE_2D, 0, RGBA, width, height, 0, RGBA, UNSIGNED_BYTE, colors);
    if(genMipMaps) {
      gl.generateMipmap(TEXTURE_2D);
    }

    gl.bindTexture(TEXTURE_2D, null);
  }

This texture gets rendered perfectly as a blue square. However if i change the updateMemory call to anything except a 1x1 texture the results are completely wrong, let me show you an example:

  GlTexture() {
    mTexture = gl.createTexture();
    updateMemory(2, 2, new Uint8List.fromList([0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x3F, 0x7F, 0xFF, 0xFF]), true);
    gl.bindTexture(TEXTURE_2D, mTexture);
    gl.texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, LINEAR_MIPMAP_NEAREST);
    gl.bindTexture(TEXTURE_2D, null);
  }

And the result looks like this:

enter image description here

While the 2x2 structure is visible the rest is just plain wrong. If neccessary i can also provide the shaders.

/EDIT: When i set the texture to the content of an image the render looks as following:

enter image description here

The texture per se is rendered correctly but the mip-level is kinda wrong.

¿Fue útil?

Solución

Assuming the code is executing the generateMipMap flow in the code so mipmaps are generated. What about TEXTURE_MAG_FILTER setting ? Also, there may be issues in CSS scaling related to the GL viewport size vs what CSS attempts to finally scale to the display.

EDIT: To be specific, have you set the canvas width/height to match the final display width/height ?

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