【发布时间】:2016-09-01 12:25:11
【问题描述】:
每当我在 webgl Firefox(确切地说是 OSX 的 Firefox Developer Edition 50.0a2)中使用纹理时,都会在控制台中输出这些警告:
错误:WebGL:texSubImage2D:发生的 CPU 端转换,即 非常慢
错误:WebGL:texSubImage2D:发生 CPU 像素转换, 这非常慢
错误:WebGL:texSubImage2D:选择的格式/类型 导致昂贵的重新格式化:0x1908/0x1401
有什么办法可以避免吗?我已经为 texImage2D 调用尝试了所有允许的格式和类型的组合,但无论我尝试什么,我都会在 CPU 上进行转换。
这是一个显示我在做什么的最小示例:
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(target, level, internalformat, width, height, border, format, type, ArrayBufferView? pixels); texImage2D 的版本并将width和height参数设置为您的textureSize
标签: javascript firefox webgl