我有一个渲染管道,我尝试gpu.js作为我的着色器机制。据我所知,虽然gpu.js可以将类型化数组缓冲区作为输入,但是无法输出到类型化数组。因此,为了渲染阴影结果,我需要将此缓冲区(可能是1080 x 1920 x 4 = 8,294,400长度数组缓冲区)转换为类型化数组。
这样做:
outputBufferRaw = pixelateMatrix(frameBuffer); // shading = ~30ms (kinda slow)
outputBuffer = new Uint8ClampedArray(outputBufferRaw); // conversion = ~100ms (very slow)
需要大约100毫秒,对于实时渲染管道来说太慢了。我怀疑普通数组的工作速度很慢,我需要以不同的方式处理它,这种方式永远不会在渲染管道中的任何地方输出无类型数组,这很公平,但我的问题是:为什么?为什么将正常数组转换为类型化数组需要这么长时间?为什么普通数组的使用速度如此之慢?
答案 0 :(得分:0)
gpu.js现在输出类型化(Float32)数组或Float32Array的多维数组。最慢的部分是gl.readPixels,最好使用纹理将值尽可能多地保留在GPU RAM中。同样,创建一个大小不超过此大小的缓冲区也可以忽略不计。