Объявление
public static void SetRandomWriteTarget(int index, ComputeBuffer uav, bool preserveCounterValue = false);public static void SetRandomWriteTarget(int index, GraphicsBuffer uav, bool preserveCounterValue = false);
public static void SetRandomWriteTarget(int index, RenderTexture uav);
Параметры
index | Индекс случайной цели записи в шейдере. |
uav | Буфер или текстура для установки в качестве цели записи. |
preserveCounterValue | Оставлять ли значение счетчика добавления/использования неизменным. |
Описание
Установить случайную цель записи для пиксельных шейдеров уровня Shader Model 4.5.
Пиксельные шейдеры уровня Shader Model 4.5 и выше могут записывать в произвольные местоположения некоторых текстур и буферов, что называется "представлениями неупорядоченного доступа" (UAV) в Использование DX11GL3Features. . Эти цели «случайной записи» устанавливаются аналогично тому, как устанавливаются несколько целей рендеринга. Вы можете использовать либо RenderTexture с установленным флагом enableRandomWrite
, либо ComputeBuffer. в качестве цели.
Индексация БПЛА немного различается на разных платформах. В DX11 первым действительным индексом БПЛА является количество активных целей рендеринга. Таким образом, в общем случае с одной целью рендеринга индексация БПЛА будет начинаться с 1. Платформы, использующие автоматически переведенные шейдеры HLSL, будут соответствовать этому поведению. Однако с написанными от руки шейдерами GLSL индексы будут соответствовать привязкам. На PS4 индексация всегда начинается с 1, чтобы соответствовать наиболее распространенному случаю.
При настройке ComputeBuffer параметр preserveCounterValue
указывает, следует ли оставить значение счетчика без изменений или сбросить его до 0 ( поведение по умолчанию).
Цели остаются заданными до тех пор, пока вы не очистите их вручную с помощью ClearRandomWriteTargets. Лучше всего вызывать ClearRandomWriteTargets после завершения рендеринга. Если этого не сделать, могут возникнуть проблемы с рендерингом, а некоторые встроенные этапы рендеринга Unity могут завершиться сбоем.
Смотрите так же: RenderTexture.enableRandomWrite, ComputeBuffer, ComputeBuffer.SetCounterValue, UsingDX11GL3Features.