Перечисление 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. При выделении памяти используется системный ОЗУ, но не уменьшается объем ОЗУ, доступного для страниц. Эти ресурсы не нужно повторно создавать при потере устройства. Ресурсы в этом пуле можно заблокировать и использовать в качестве источника для операции IDirect3DDevice9::UpdateSurface или IDirect3DDevice9::UpdateTexture для ресурса памяти, созданного с помощью D3DPOOL_DEFAULT.

D3DPOOL_SCRATCH

Ресурсы помещаются в системную ОЗУ и не нуждаются в повторном создании при потере устройства. Эти ресурсы не привязаны к ограничениям размера устройства или формата. Из-за этого устройство Direct3D не может получить доступ к этим ресурсам и не может быть задано в качестве текстур или целевых объектов отрисовки. Однако эти ресурсы всегда можно создавать, блокировать и копировать.

D3DPOOL_FORCE_DWORD

Принудительно компилирует это перечисление до 32 бит в размере. Без этого значения некоторые компиляторы позволили бы компилировать это перечисление до размера, отличного от 32 бит. Это значение не используется.

Комментарии

Все типы пулов допустимы для всех ресурсов, включая буферы вершин, буферы индексов, текстуры и поверхности.

В следующих таблицах указаны ограничения на типы пулов для целевых объектов отрисовки, наборов элементов глубины, а также динамического использования и использования 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