DX11 Буфер с динамическим размером

Я пытаюсь сделать деформируемый воксельный ландшафт для проекта для университета. В настоящее время я использую ряд 3DTextures для хранения данных вокселей в «кусках». Мой план состоял в том, чтобы использовать вычислительный шейдер для выполнения алгоритма марширующих кубов на указанных воксельных данных и вывода вершин в буфер, который затем можно было бы визуализировать в каждом кадре.

Проблема в том, что для настройки БПЛА для структурированного буфера, который я использую, мне нужно знать, сколько элементов он будет иметь для NumElements D3D11_BUFFER_UAV. Я могу сделать предположение о максимальном количестве, которое он может содержать, но я не могу узнать, сколько на самом деле будет, пока не завершится вычислительный шейдер, и мне не пришло в голову, что это может быть не лучший способ решения проблемы. .

Все, что мне действительно нужно сделать, это заставить вычислительный шейдер выводить произвольное количество вершин, которые можно сохранить и отобразить позже. Есть идеи, как лучше всего это сделать?


person Chesh    schedule 31.03.2013    source источник


Ответы (2)


Похоже, лучший способ сделать это - использовать буфер добавления. Вы должны быть осторожны, чтобы не полагаться на порядок, в котором вы добавляете элементы, поскольку многопоточность разработана специально для того, чтобы элементы могли добавляться случайным образом. Мне приходилось добавлять данные по одному треугольнику за раз, что не позволяло мне использовать индексный буфер, но я не видел другого способа сделать это.

Если кто-то предложит лучшее решение, буду рад услышать.

person Chesh    schedule 14.04.2013

В моем воксельном движке у меня была та же проблема: изначально я выделял буферы так, чтобы они могли содержать максимальное количество вершин, которые могли быть сгенерированы.

После того, как все заработало, я протестировал его с функциями шума, которые планировал использовать, и отметил наибольшее количество вершин, которые требуются для буфера вершин.

Затем я просто добавил немного и использовал это значение как размер всех буферов вершин в моем приложении.

person gareththegeek    schedule 17.04.2013