簡體   English   中英

為什么從無類型數組到Uint8ClampedArray的轉換這么慢?

[英]Why is conversion from an untyped array to Uint8ClampedArray so slow?

我有一個渲染管道,在那里我正在嘗試使用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毫秒,對於實時渲染管道來說太慢了。 我懷疑普通數組的處理速度很慢,我需要以不同的方式處理該問題,該方法永遠不會在渲染管道的任何位置輸出未類型化的數組,這很公平,但是我的問題是:為什么? 為什么將普通數組轉換為類型數組需要這么長時間? 為什么普通陣列使用起來這么慢?

gpu.js現在輸出用於多維的類型化(Float32)數組或Float32Array數組。 最慢的部分是gl.readPixels,最好使用紋理將值盡可能多地保留在GPU RAM中。 同樣,創建一個大小可以讀回的緩沖區並不是無關緊要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM