ComputeShader.SetConstantBuffer
Declaration
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 | ID имя свойства для постоянного буфера в коде шейдера. Используйте Shader.PropertyToID для получения этого ID. |
| имя | Имя буфера для привязки в качестве постоянного буфера. |
| буфер | Буфер для привязки в качестве постоянного буфера. |
| офсет | Смещение в байтах от начала ComputeBuffer для привязки. Должно быть кратным SystemInfo.constantBufferOffsetAlignmentили 0, если это значение равно 0. |
| размер | Число байт для привязки. |
Описание
Устанавливает ComputeBuffer или GraphicsBuffer в качестве именованного постоянного буфера для ComputeShader.
С помощью этого метода все параметры в константном буфере вычислительного шейдера переопределяются содержимым ComputeBuffer или GraphicsBuffer.
Для использования этого метода должны быть выполнены следующие условия:
- Флаг ComputeBuffer или GraphicsBuffer должен быть создан с соответствующим флагом ComputeBufferType.Constant или GraphicsBuffer.Target.Constant.
- Все варианты шейдеров для этого Материала должны использовать одинаковую расстановку постоянных буферов для данного постоянного буфера.
- Расположение данных в постоянном буфере должно точно соответствовать данным, представленным в буфере.
Если вышеуказанные условия не выполнены, буфер может не быть связан правильно, и поэтому регулярные параметры будут взяты. В противном случае могут возникнуть визуальные артефакты.
Расположение данных в буфере константы может быть разным в зависимости от графики API. Это означает, что SetConstantBuffer может перезаписать данные или установить переменные на неправильные значения. См. Запись шейдеров для разных графиков APIs для более подробной информации.
После того, как эта функция была вызвана с ненулевым ComputeBuffer или GraphicsBuffer, вы больше не сможете вручную устанавливать значение переменной внутри переопределенного буфера константы. Вызовы ComputeShader.SetFloat и аналогичные, где заданное имя свойства ID указывает на переменные внутри переопределенного буфера константы, не будут иметь эффекта.
Константные буферы связаны со всеми ядрами в ComputeShader.