2016-04-25 13 views
1

Imは私が持っているテクスチャのRGBA値を読み取るしようとしているが、それは、次のエラーを返す保持し、すべての値が0として出てくる:WebGLのreadPixels()無効な操作:無効なフォーマット/タイプの組み合わせ

HERESに
WebGL: INVALID_OPERATION: readPixels: invalid format/type combination 

初期設定では私のコードのピクセルがテクスチャ値の配列です:後で、その後

texture = gl.createTexture() 
    gl.activeTexture(gl.TEXTURE0) 
    gl.bindTexture(gl.TEXTURE_2D, texture) 
    gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1) 
    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, n, n, 0, 
    gl.RGBA, gl.FLOAT, new Float32Array(pixels)) 

    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST) 
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST) 

    FBO = gl.createFramebuffer() 

    gl.bindFramebuffer(gl.FRAMEBUFFER, FBO) 
    gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, 
     gl.TEXTURE_2D, texture, 0) 

そして、クリックイベントに、私は次のコマンドを実行します。

gl.bindFramebuffer(gl.FRAMEBUFFER, FBO); 

var data = new Uint8Array(resolution * resolution * 4); 
gl.readPixels(0, 0, resolution, resolution, gl.RGBA, gl.UNSIGNED_BYTE, data); 

console.log(data) 

データは、大きなゼロの配列を返します。 フォーマットとタイプの正しい組み合わせは何ですか?ここでどこが間違っていますか?

答えて

1

gl.getContext("experimental-webgl")

を使用した後、私は次を使用してフロートテクスチャのピクセルを読み取るための管理:

gl.bindFramebuffer(gl.FRAMEBUFFER, _this.myFrameBufferObject); 
    var data = new Float32Array(resolution * resolution * 4); 
    gl.readPixels(0,0,resolution,resolution,gl.RGBA,gl.FLOAT,data); 

クレジットは以下のコメントに行くthis answer

関連する問題