Перечисление 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.

Требования

Требование Значение
Заголовок
D3D9Types.h

См. также раздел

Перечисления Direct3D

D3DUSAGE

IDirect3DDevice9::CreateCubeTexture

IDirect3DDevice9::CreateIndexBuffer

IDirect3DDevice9::CreateTexture

IDirect3DDevice9::CreateVolumeTexture

IDirect3DDevice9::CreateVertexBuffer

D3DINDEXBUFFER_DESC

D3DSURFACE_DESC

D3DVERTEXBUFFER_DESC

D3DVOLUME_DESC