Accessing image/texture data (texels) on WebGL

后端 未结 2 1601
野性不改
野性不改 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:04

    I use HTML5 to read the texels with the following code snippets:

    var myCanvas = document.createElement("canvas");
    myCanvas.width = texture.image.width; 
    myCanvas.height = texture.image.height;
    var myCanvasContext = myCanvas.getContext("2d"); // Get canvas 2d context
    myCanvasContext.drawImage(texture.image, 0, 0); // Draw the texture
    var texels = myCanvasContext.getImageData(0,0, width, height); // Read the texels/pixels back
    

    It does what I want to do. Please let me know if there is a better way

    0 讨论(0)
  • 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;
    
    0 讨论(0)
提交回复
热议问题