Почему преобразование из нетипизированного массива в Uint8ClampedArray такое медленное? - PullRequest
0 голосов
/ 26 мая 2018

У меня есть конвейер рендеринга, где я опробую 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 мс, что слишком медленно для конвейера рендеринга в реальном времени.Я подозреваю, что обычные массивы работают медленно, и мне нужно обрабатывать это по-другому, никогда не выводя нетипизированный массив где-либо в конвейере рендеринга, это справедливо, но мой вопрос: почему?Почему преобразование обычного массива в типизированный массив занимает так много времени?Почему обычные массивы так медленно работают с

1 Ответ

0 голосов
/ 05 сентября 2018

gpu.js теперь выводит типизированные (Float32) массивы или массивы Float32Array для многомерных.Самая медленная часть будет gl.readPixels, лучше всего использовать текстуры, чтобы максимально сохранить значения в ОЗУ GPU.Кроме того, создание буфера такого размера для чтения обратно не является незначительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...