64к прямоугольников. Можно ли каким-то образом в шейдере индексироваться через эти идшники в индекс прямоугольника в общем буфере, куда они последовательно записаны?
ну например IDшником инстанса
Но тогда в любом случае нужно на цпу пересчитывать ид в позицию, я как раз думаю, можно ли это как-то обойти, сделать аналог ассоциативного контейнера в памяти гпу
Я так делаю - у меня на карточке лежит большой буфер с данными по всем объектам. Дальше на фрейме фильтруешь IDшники инстансов видные в кадре, сортируешь или что там надо. Потом в шейдере по InstanceID индексируешь этот буфер и рисуешь.
Ну да, ситуация примерно такая же, но проблема в чём, мне нужно отрисовывать очень много символов по их идентификатору (4 бита, 32 - индекс символа в юникоде, ещё 32 - хеш его источника, файла шрифтов определённого размера). Все они лежат в огромной текстуре, есть буфер, в который они записаны по порядку загрузки (по сути, в произвольном). Сейчас на вход подаётся структура из экранных координат и порядкового номера символа в буфере. Но при её формировании используется std::unordered_map<uint64_t, size_t>. А хотелось бы сразу писать в входной буфер просто индекс символа, без предварительного поиска его позиции, поскольку маппинг всё равно стабильный. То есть, нужна реализация хеш-таблицы или что-то похожее в шейдере.
Обсуждают сегодня