Контексты устройства Direct3D11 - SIISII/DirectX Wiki

Контексты [устройства Direct3D11](/SIISII/DirectX/wiki/Устройство Direct3D10 и Direct3D11) предназначены для выполнения собственно рендеринга; их наличие является одним из важнейших отличий Direct3D11 от Direct3D10, где рендеринг выполняется самим устройством.

Контексты являются детьми устройства, то есть наследниками интерфейса ID3D11DeviceChild. Методы, унаследованные от этого интерфейса, являются потокобезопасными, т. е. любой поток без каких-либо ограничений может вызывать их, однако методы собственно контекста таковыми не являются: хотя их вызов допустим из любого потока, в любой момент времени лишь один из потоков может вызывать какой-либо метод данного контекста. Однако контексты независимы друг от друга, поэтому с каждым из контекстов может работать свой поток.

Контекст содержит информацию о состоянии [графического конвейера](/SIISII/DirectX/wiki/Графический конвейер Direct3D10 и Direct3D11) (например, о буферах, содержащих исходные данные, и об используемых шейдерах), и формирует команды, необходимые для выполнения рендеринга.

Немедленный контекст

Немедленный контекст (immediate context) выполняет рендеринг немедленно, то есть фактически осуществляет его, используя возможности графического процессора. У каждого устройства Direct3D11 имеется один и только один немедленный контекст, интерфейс которого может быть получен либо сразу при создании устройства, либо позднее с помощью одного из методов серии ID3D11Device::GetImmediateContextID3D11Device3::GetImmediateContext3.

Отложенные контексты

Отложенный контекст (deferred context) формирует состояние графического конвейера и создаёт список команд, которые впоследствии могут быть переданы на выполнение немедленному контексту. Поскольку отложенных контекстов может быть несколько и они могут создаваться разными потоками, имеется возможность подготовить сразу несколько списков команд для рендеринга, а затем фактически выполнить его в немедленном контексте с максимально возможной скоростью, не отвлекаясь на лишние операции.

Для создания отложенного контекста используется один из методов серии ID3D11Device::CreateDeferredContextID3D11Device3::CreateDeferredContext3.

Интерфейсы контекста устройства

Методы интерфейса ID3D11DeviceContext

Этот интерфейс появился вместе с DirectX 11 в Windows 7 и был добавлен в Windows Vista соответствующим дополнением. Он объявлен в файле d3d11.h.

Дополнительные методы интерфейса ID3D11DeviceContext1

Этот интерфейс объявлен в файле d3d11_1.h.

Дополнительные методы интерфейса ID3D11DeviceContext2

Этот интерфейс объявлен в файле d3d11_2.h.

Дополнительные методы интерфейса ID3D11DeviceContext3

Этот интерфейс объявлен в файле d3d11_3.h.

Дополнительные методы интерфейса ID3D11DeviceContext4

Этот интерфейс появился в Windows 10 Creators Update. Он объявлен в файле d3d11_3.h.