Accessing image/texture data (texels) on WebGL

后端 未结 2 1623
野性不改
野性不改 2021-01-06 02:29

I have the following code snippet on WebGL:

var texture = gl.createTexture();
texture.image = new Image();
texture.image.onload = function() { 
     .... //          


        
2条回答
  •  情深已故
    2021-01-06 03:09

    You can create a framebuffer backed by the texture and then use readPixels() to get the raw RGBA data.

    var texture = gl.createTexture();
    texture.image = new Image();
    texture.image.onload = function() { 
    
      // Push Texture data to GPU memory
      gl.bindTexture(gl.TEXTURE_2D, texture);
      gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
      gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this);
      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
    
      // Create a framebuffer backed by the texture
      var framebuffer = gl.createFramebuffer();
      gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
      gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
    
      // Read the contents of the framebuffer (data stores the pixel data)
      var data = new Uint8Array(this.width * this.height * 4);
      gl.readPixels(0, 0, this.width, this.height, gl.RGBA, gl.UNSIGNED_BYTE, data);
    
      gl.deleteFramebuffer(framebuffer);
    };
    texture.image.src = urlImage;
    

提交回复
热议问题