Перечисление D3DPOOL
Определяет класс памяти, содержащий буферы для ресурса.
Синтаксис
typedef enum D3DPOOL {
D3DPOOL_DEFAULT = 0,
D3DPOOL_MANAGED = 1,
D3DPOOL_SYSTEMMEM = 2,
D3DPOOL_SCRATCH = 3,
D3DPOOL_FORCE_DWORD = 0x7fffffff
} D3DPOOL, *LPD3DPOOL;
Константы
-
D3DPOOL_DEFAULT
-
Ресурсы помещаются в пул памяти, наиболее подходящий для набора потребления, запрошенного для данного ресурса. Обычно это видеопамять, включая локальную память видео и память AGP. Пул D3DPOOL_DEFAULT отделен от D3DPOOL_MANAGED и D3DPOOL_SYSTEMMEM, и указывает, что ресурс помещается в предпочтительную память для доступа к устройству. Обратите внимание, что D3DPOOL_DEFAULT никогда не означает, что в качестве типа пула памяти для этого ресурса следует выбрать D3DPOOL_MANAGED или D3DPOOL_SYSTEMMEM. Текстуры, помещенные в пул D3DPOOL_DEFAULT, не могут быть заблокированы, если они не являются динамическими текстурами или являются частными, FOURCC, форматами драйверов. Для доступа к разблокированным текстурам необходимо использовать такие функции, как IDirect3DDevice9::UpdateSurface, IDirect3DDevice9::UpdateTexture, IDirect3DDevice9::GetFrontBufferData и IDirect3DDevice9::GetRenderTargetData. D3DPOOL_MANAGED, вероятно, лучший выбор, чем D3DPOOL_DEFAULT для большинства приложений. Обратите внимание, что некоторые текстуры, созданные в форматах пикселей драйвера, неизвестных среде выполнения Direct3D, могут быть заблокированы. Кроме того, обратите внимание, что в отличие от текстур — буферы обратной цепочки буферов буферов, целевых объектов отрисовки, буферов вершин и буферов индексов могут быть заблокированы. При потере устройства ресурсы, созданные с помощью D3DPOOL_DEFAULT, необходимо освободить перед вызовом IDirect3Device9::Reset. Дополнительные сведения см. в разделе "Потерянные устройства" (Direct3D 9).
При создании ресурсов с помощью D3DPOOL_DEFAULT, если память видеоадаптер уже зафиксирована, управляемые ресурсы будут исключены для освобождения достаточного объема памяти для удовлетворения запроса.
-
D3DPOOL_MANAGED
-
Ресурсы автоматически копируются в память, доступную для устройств, по мере необходимости. Управляемые ресурсы поддерживаются системной памятью и не нужно создавать повторно при потере устройства. Дополнительные сведения см. в статье об управлении ресурсами (Direct3D 9 ). Управляемые ресурсы могут быть заблокированы. Только копия системной памяти изменяется напрямую. Direct3D копирует изменения в память, доступную для драйверов, по мере необходимости.
Различия между Direct3D 9 и Direct3D 9Ex:
D3DPOOL_MANAGED действителен с IDirect3DDevice9; однако недопустимо с IDirect3DDevice9Ex. -
D3DPOOL_SYSTEMMEM
-
Ресурсы помещаются в память, которая обычно недоступна устройством Direct3D. Это выделение памяти потребляет системный ОЗУ, но не уменьшает объем оЗУ для страничных страниц. Эти ресурсы не нужно повторно создавать при потере устройства. Ресурсы в этом пуле могут быть заблокированы и могут использоваться в качестве источника для операции IDirect3Device9::UpdateSurface или IDirect3DDevice9::UpdateTexture для ресурса памяти, созданного с помощью D3DPOOL_DEFAULT.
-
D3DPOOL_SCRATCH
-
Ресурсы помещаются в системную ОЗУ и не нужно повторно создавать при потере устройства. Эти ресурсы не привязаны к ограничениям размера устройства или формата. Из-за этого эти ресурсы не могут быть доступны устройству Direct3D, а также не заданы как текстуры или целевые объекты отрисовки. Однако эти ресурсы всегда можно создавать, блокировать и копировать.
-
D3DPOOL_FORCE_DWORD
-
Заставляет это перечисление компилироваться в 32 бита в размере. Без этого значения некоторые компиляторы позволили бы скомпилировать это перечисление в размер, отличный от 32 бит. Это значение не используется.
Remarks
Все типы пулов допустимы со всеми ресурсами, включая буферы вершин, буферы индексов, текстуры и поверхности.
В следующих таблицах указываются ограничения на типы пулов для целевых объектов отрисовки, наборов элементов глубины и динамических и MIP-карт. X обозначает совместимое сочетание; Отсутствие x указывает на несовместимость.
пул | D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL |
---|---|---|
D3DPOOL_DEFAULT | x | x |
D3DPOOL_MANAGED | ||
D3DPOOL_SCRATCH | ||
D3DPOOL_SYSTEMMEM |
пул | D3DUSAGE_DYNAMIC | D3DUSAGE_AUTOGENMIPMAP |
---|---|---|
D3DPOOL_DEFAULT | x | x |
D3DPOOL_MANAGED | x | |
D3DPOOL_SCRATCH | ||
D3DPOOL_SYSTEMMEM | x |
Дополнительные сведения о типах использования см. в разделе D3DUSAGE.
Пулы не могут быть смешанными для разных объектов, содержащихся в одном ресурсе (уровни MIP в MIP-карте), и при выборе пула его нельзя изменить.
Приложения должны использовать D3DPOOL_MANAGED для большинства статических ресурсов, так как это позволяет приложению работать с потерянными устройствами. (Управляемые ресурсы восстанавливаются средой выполнения.) Это особенно полезно для систем унифицированной архитектуры памяти (UMA). Другие динамические ресурсы не являются хорошим совпадением для D3DPOOL_MANAGED. Фактически нельзя создавать буферы индексов и буферы вершин с помощью D3DPOOL_MANAGED вместе с D3DUSAGE_DYNAMIC.
Для динамических текстур иногда желательно использовать пару текстур памяти видео и системной памяти, распределив память видео с помощью D3DPOOL_DEFAULT и системной памяти с помощью D3DPOOL_SYSTEMMEM. Вы можете заблокировать и изменить биты текстуры системной памяти с помощью метода блокировки. Затем можно обновить текстуру памяти видео с помощью IDirect3DDevice9::UpdateTexture.
Требования
Требование | Значение |
---|---|
Заголовок |
|
См. также раздел