Bất cứ khi nào tôi sử dụng kết cấu trong webgl Firefox (Firefox Developer Edition 50.0a2 cho OSX, để được excact) kết quả đầu ra những cảnh báo trong giao diện điều khiển:Tránh phía CPU chuyển đổi với texImage2D trong Firefox
Error: WebGL: texSubImage2D: Incurred CPU-side conversion, which is very slow
Error: WebGL: texSubImage2D: Incurred CPU pixel conversion, which is very slow
Error: WebGL: texSubImage2D: Chosen format/type incurred an expensive reformat: 0x1908/0x1401
Có cách nào để tránh điều đó? Tôi đã thử tất cả các kết hợp các định dạng và kiểu được phép cho cuộc gọi texImage2D
, nhưng tôi nhận được chuyển đổi trên CPU bất kể tôi cố gắng gì.
Dưới đây là một ví dụ nhỏ cho thấy những gì tôi đang làm:
var gl = document.querySelector('canvas').getContext('webgl');
var textureSize = 512;
var canvas = document.createElement('canvas');
canvas.width = textureSize;
canvas.height = textureSize;
var ctx = canvas.getContext('2d');
ctx.fillStyle = 'rgba(0, 1, 0, 0.0)';
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = 'rgba(0, 0, 0, 0.7)';
ctx.fillRect(0, 0, 400, 400);
var texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, canvas);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
<canvas />
Hãy thử sử dụng 'gl.texImage2D (mục tiêu, cấp, định dạng nội bộ, chiều rộng, chiều cao, đường viền, định dạng, loại, ArrayBufferView? Pixel) '; phiên bản của texImage2D và đặt các đối số 'width' và' height' thành 'textureSize' của bạn – Blindman67