如何在着色器中处理Float32Array? (WebGL的)

时间:2016-03-19 17:29:58

标签: javascript glsl webgl opengl-es-2.0

据我所知,可以在WebGL中使用Uint8Array作为纹理。但是如何有效地将大Float32ArrayFloat64Array传递给着色器呢?浮点值不在(0.0,1.0)范围内,也可能为负值。

我知道,有些设备不支持high precision float,如果在此过程中丢失了某些精度,则不会出现问题。

1 个答案:

答案 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