据我所知,可以在WebGL中使用Uint8Array
作为纹理。但是如何有效地将大Float32Array
或Float64Array
传递给着色器呢?浮点值不在(0.0,1.0)范围内,也可能为负值。
我知道,有些设备不支持high precision float
,如果在此过程中丢失了某些精度,则不会出现问题。
答案 0 :(得分:2)
尝试使用类似
的代码启用浮点纹理var ext = gl.getExtension("OES_texture_float");
if (!ext) {
alert("sorry, no floating point textures");
return;
}
现在,您可以使用
创建Float32Array
的纹理
gl.texImage2D(target, level, format, width, height, 0,
format, gl.FLOAT, someFloat32Array);
请注意,能够过滤浮点纹理是一个单独的扩展,所以如果你需要过滤你也必须检查它
var ext = gl.getExtension("OES_texture_float_linear");
if (!ext) {
alert("sorry, can't filter floating point textures");
return;
}
否则,您需要将纹理过滤设置为NEAREST