2015-01-13 3 views
1

Я реализую GLSL-подборку, которая использует readPixels() для получения данных с одним пикселем.ускорение чтения WebGL для выбора

Моя первая попытка состояла в том, чтобы просто нарисовать цветную карту (1x1 пиксель) на экране, прочитать пиксель, а затем нарисовать его. Это, к сожалению, приводит к падению fps от твердых 60 до 30-40.

После некоторых поисковых запросов я выяснил, что проблема была вызвана синхронизацией между процессором и графическим процессором. Так что я попытался рендеринга в закадровый буфер, как описано здесь http://coffeesmudge.blogspot.com/2013/08/implementing-picking-in-webgl.html

но мне кажется, что это ничего не меняет - я до сих пор читать из буфера, пока он находится в использовании (он должен быть активным readPixels работать).

Так что мой вопрос - можно ли как-то прочитать из офшорного буфера, пока он не используется?

ответ

0

Вы можете использовать несколько целей Визуализации: https://www.khronos.org/registry/webgl/extensions/WEBGL_draw_buffers/

Таким образом, вы можете прикрепить ваш текущий буфер кадра в цветном приложении 0, и дополнительный буфер сбора в приложении цвета 1. В дополнительном буфере вы можете написать сбор информации (например, идентификатор объекта).

Поскольку все сделано (рендеринг сцены и рендеринг буфера выбора) за один проход, накладные расходы должны быть минимальными.

Смежные вопросы