Отбор проб из текстуры, которая также является рендеринговой целью

StackOverflow https://stackoverflow.com/questions/4066454

Вопрос

Я знаю, что это технически не поддерживается (и, насколько я могу сказать, что это неопределенное поведение), но действительно ли фатально ужасная вещь для образца из текстуры, которая также пишется?

Я спрашиваю, потому что мне нужно прочитать с глубины текстуры, которые мне также нужно написать, если я не могу сделать это, это означает, что мне придется скопировать текстуру глубины, и если это не так большая сделка, которую я не знаю Свидетельствовать о вреде просто копированию его?

Спасибо за любую помощь!

Это было полезно?

Решение

Да, это смертельно и триггеры неопределенного поведения. Просто сделайте копию и прочитайте с копии.

Объяснение просто. Поскольку фрагменты обрабатываются параллельно в не указанном порядке, вы можете читать с уже письменных текселей или оригинальных значений, и нет никакого способа узнать, что вы читаете. Создание копирования и чтения от него гарантирует, что вы будете читать правильные значения.

Другие советы

Матиас и Гос охватывали самые важные биты. Позвольте мне добавить пару интересных фактов:

  • Время выполнения Direct3D активно уничтожает текстуры, когда вы связываете их базовый ресурс в виде рендеринга (так что вы не можете создать там цикл).
  • UAVS в Direct3D 11 фактически разрешает операции по модификации чтения-записи на подмножестве форматов (те, которые не требуют преобразования типа). Однако они не гарантируют ни один порядок работы. Это то, что используется рядом алгоритмов, которые делают независимую порядок прозрачность, в частности (где переоформление выполняется вручную).
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top