Объекты состояния (Direct3D 10)
В Direct3D 10 состояние устройства группируется в объекты состояния, которые значительно снижают стоимость изменений состояния. Существует несколько объектов состояния, каждый из которых предназначен для инициализации набора состояний для определенного этапа конвейера. Вы можете создать до 4096 каждого типа объекта состояния.
- состоянияInput-Layout
- состояние растризатора
- состоянияDepth-Stencil
- состояние blend
- состояние образца
- рекомендации по производительности
- связанные разделы
Состояние Input-Layout
Эта группа состояния (см. D3D10_INPUT_ELEMENT_DESC) определяет, как этап входных сборщика считывает данные из входных буферов и собирает его для использования вершинным шейдером. К ним относятся такие состояния, как количество элементов во входном буфере и сигнатура входных данных. Этап сборщика входных данных — это новый этап конвейера, задание которого заключается в потоковой передаче примитивов из памяти в конвейер.
Сведения о создании объекта input-layout-state см. в разделе CreateInputLayout.
Состояние растризатора
Эта группа состояния (см. D3D10_RASTERIZER_DESC) инициализирует этап растризатора. Этот объект включает в себя состояние, например режимы заливки или сворачивания, включение прямоугольника ножницы для вырезки и настройки многофакторных параметров. Этот этап растеризирует примитивы в пиксели, выполняя такие операции, как вырезка и сопоставление примитивов с окном просмотра.
Сведения о создании объекта rasterizer-state см. в разделе CreateRasterizerState.
Состояние Depth-Stencil
Эта группа состояний (см. D3D10_DEPTH_STENCIL_DESC) инициализирует часть набора элементов глубины этапа слияния выходных данных. В частности, этот объект инициализирует глубину и наборы элементов тестирования.
Сведения о создании объекта глубокого состояния см. в разделе CreateDepthStencilState.
Состояние blend
Эта группа состояний (см. D3D10_BLEND_DESC) инициализирует часть этапа слияния выходных данных.
Сведения о создании объекта blend-state см. в разделе CreateBlendState.
Состояние sampler
Эта группа состояний (см. D3D10_SAMPLER_DESC) инициализирует объект sampler. Объект sampler используется этапами шейдера для фильтрации текстур в памяти.
Различия между Direct3D 9 и Direct3D 10:
- В Direct3D 10 объект sampler больше не привязан к определенной текстуре, он просто описывает, как выполнять фильтрацию с помощью любого присоединенного ресурса.
Сведения о создании объекта sampler-state см. в разделе CreateSamplerState.
Рекомендации по производительности
Проектирование API для использования объектов состояния создает несколько преимуществ производительности. К ним относятся проверка состояния во время создания объекта, включение кэширования объектов состояния в оборудовании и значительно уменьшение объема состояния, передаваемого во время вызова API настройки состояния (передавая дескриптор в объект состояния вместо состояния).
Чтобы добиться этих улучшений производительности, необходимо создать объекты состояния при запуске приложения, а также перед циклом отрисовки. Объекты состояния неизменяемы, т. е. после их создания нельзя изменить. Вместо этого необходимо уничтожить и воссоздать их. Чтобы справиться с этим ограничением, можно создать до 4096 каждого типа объектов состояния. Например, можно создать несколько объектов sampler с различными сочетаниями состояний sampler-state. Затем изменение состояния выборки выполняется путем вызова соответствующего API Set, который передает дескриптор объекту (в отличие от состояния sampler). Это значительно сокращает объем накладных расходов во время каждого кадра отрисовки для изменения состояния, так как количество вызовов и объем данных значительно уменьшается.
Кроме того, можно использовать систему эффектов, которая будет автоматически управлять эффективным созданием и уничтожением объектов состояния для приложения.
Связанные разделы
-
функции API (Direct3D 10)