Объявление
public void SetConstantBuffer(int nameID, ComputeBuffer buffer, int offset, int size);public void SetConstantBuffer(string name, ComputeBuffer buffer, int offset, int size);
public void SetConstantBuffer(int nameID, GraphicsBuffer buffer, int offset, int size);
public void SetConstantBuffer(string name, GraphicsBuffer buffer, int offset, int size);
Параметры
nameID | Идентификатор имени свойства для буфера констант в коде шейдера. Используйте Shader.PropertyToID, чтобы получить этот идентификатор. |
name | Имя буфера для привязки в качестве буфера констант. |
buffer | Буфер для привязки в качестве буфера констант. |
offset | Смещение в байтах от начала ComputeBuffer для привязки. Должно быть кратно SystemInfo.constantBufferOffsetAlignment или 0, если это значение равно 0.. |
size | Количество байтов для привязки. |
Описание
Задает ComputeBuffer или GraphicsBuffer в качестве именованного буфера констант для ComputeShader.
Используйте этот метод, чтобы переопределить все параметры шейдера в заданном буфере констант содержимым заданного ComputeBuffer или GraphicsBuffer.
Для использования этого метода должны быть выполнены следующие условия:
При использовании ComputeBuffer в качестве параметра он должен быть создан с флагом ComputeBufferType.Constant. Точно так же, когда в качестве параметра используется GraphicsBuffer, он должен быть создан с флагом GraphicsBuffer.Target.Constant. Структура данных буфера констант должна точно совпадать с данными, предоставленными в ComputeBuffer или GraphicsBuffer. Все различные варианты шейдера для этого ComputeShader должны использовать один и тот же макет буфера констант для данного буфера констант.
Если вышеуказанные условия не выполняются, буфер может быть привязан неправильно, и поэтому будут выбраны обычные параметры. В качестве альтернативы могут возникать визуальные артефакты.
После того как эта функция была вызвана с ненулевым ComputeBuffer или GraphicsBuffer, вы больше не сможете вручную установить значение переменной внутри переопределенного буфера констант. Вызовы ComputeShader.SetFloat и т.п., когда заданный идентификатор имени свойства указывает на переменную внутри переопределенного буфера констант, не будут иметь никакого эффекта.
Постоянные буферы привязаны ко всем ядрам в ComputeShader.