Всякий раз, когда я использую текстуры в WebGL Firefox (Firefox Edition, Developer 50.0a2 для OSX, чтобы быть excact) выводит эти предупреждения в консоли:Избегайте сторону процессора преобразование с texImage2D в 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
Есть ли способ избегать этого? Я пробовал все комбинации разрешенных форматов и типов для вызова texImage2D
, но я получаю преобразование на ЦП независимо от того, что я пытаюсь.
Вот минимальный пример, показывающий, что я делаю:
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 />
Попробуйте использовать 'gl.texImage2D (цель, уровень, внутренний формат, ширина, высота, граница, формат, тип, ArrayBufferView? Pixels)'; версию texImage2D и установить аргументы 'width' и' height' в ваш 'textureSize' – Blindman67