Enumeração D3DPOOL

Define a classe de memória que contém os buffers de um recurso.

Syntax

typedef enum D3DPOOL { 
  D3DPOOL_DEFAULT      = 0,
  D3DPOOL_MANAGED      = 1,
  D3DPOOL_SYSTEMMEM    = 2,
  D3DPOOL_SCRATCH      = 3,
  D3DPOOL_FORCE_DWORD  = 0x7fffffff
} D3DPOOL, *LPD3DPOOL;

Constantes

D3DPOOL_DEFAULT

Os recursos são colocados no pool de memória mais apropriado para o conjunto de usos solicitado para o recurso especificado. Geralmente, isso é memória de vídeo, incluindo memória de vídeo local e memória AGP. O pool de D3DPOOL_DEFAULT é separado de D3DPOOL_MANAGED e D3DPOOL_SYSTEMMEM e especifica que o recurso é colocado na memória preferencial para acesso ao dispositivo. Observe que D3DPOOL_DEFAULT nunca indica que D3DPOOL_MANAGED ou D3DPOOL_SYSTEMMEM devem ser escolhidos como o tipo de pool de memória para esse recurso. As texturas colocadas no pool de D3DPOOL_DEFAULT não podem ser bloqueadas, a menos que sejam texturas dinâmicas ou sejam privadas, FOURCC, formatos de driver. Para acessar texturas desbloqueáveis, você deve usar funções como IDirect3DDevice9::UpdateSurface, IDirect3DDevice9::UpdateTexture, IDirect3DDevice9::GetFrontBufferData e IDirect3DDevice9::GetRenderTargetData. D3DPOOL_MANAGED provavelmente é uma escolha melhor do que D3DPOOL_DEFAULT para a maioria dos aplicativos. Observe que algumas texturas criadas em formatos de pixel proprietários do driver, desconhecidos para o runtime do Direct3D, podem ser bloqueadas. Observe também que , ao contrário das texturas, alterne buffers de volta da cadeia, renderize destinos, buffers de vértice e buffers de índice podem ser bloqueados. Quando um dispositivo é perdido, os recursos criados usando D3DPOOL_DEFAULT devem ser liberados antes de chamar IDirect3DDevice9::Reset. Para obter mais informações, consulte Dispositivos Perdidos (Direct3D 9).

Ao criar recursos com D3DPOOL_DEFAULT, se a memória da placa de vídeo já estiver confirmada, os recursos gerenciados serão removidos para liberar memória suficiente para atender à solicitação.

D3DPOOL_MANAGED

Os recursos são copiados automaticamente para a memória acessível pelo dispositivo, conforme necessário. Os recursos gerenciados são apoiados pela memória do sistema e não precisam ser recriados quando um dispositivo é perdido. Consulte o Gerenciamento de Recursos (Direct3D 9) para obter mais informações. Os recursos gerenciados podem ser bloqueados. Somente a cópia de memória do sistema é modificada diretamente. O Direct3D copia suas alterações na memória acessível pelo driver conforme necessário.

Diferenças entre Direct3D 9 e Direct3D 9Ex:
D3DPOOL_MANAGED é válido com IDirect3DDevice9; no entanto, ele não é válido com IDirect3DDevice9Ex.

 

D3DPOOL_SYSTEMMEM

Os recursos são colocados na memória que normalmente não é acessível pelo dispositivo Direct3D. Essa alocação de memória consome RAM do sistema, mas não reduz a RAM pageable. Esses recursos não precisam ser recriados quando um dispositivo é perdido. Os recursos nesse pool podem ser bloqueados e podem ser usados como a origem de uma operação IDirect3DDevice9::UpdateSurface ou IDirect3DDevice9::UpdateTexture para um recurso de memória criado com D3DPOOL_DEFAULT.

D3DPOOL_SCRATCH

Os recursos são colocados na RAM do sistema e não precisam ser recriados quando um dispositivo é perdido. Esses recursos não são associados pelo tamanho do dispositivo ou restrições de formato. Por isso, esses recursos não podem ser acessados pelo dispositivo Direct3D nem definidos como texturas ou destinos de renderização. No entanto, esses recursos sempre podem ser criados, bloqueados e copiados.

D3DPOOL_FORCE_DWORD

Força essa enumeração a compilar para 32 bits de tamanho. Sem esse valor, alguns compiladores permitiriam que essa enumeração fosse compilada em um tamanho diferente de 32 bits. Este valor não é usado.

Comentários

Todos os tipos de pool são válidos com todos os recursos, incluindo: buffers de vértice, buffers de índice, texturas e superfícies.

As tabelas a seguir indicam restrições em tipos de pool para destinos de renderização, estênceis de profundidade e usos dinâmicos e de mipmap. Um x indica uma combinação compatível; a falta de um x indica incompatibilidade.

pool D3DUSAGE_RENDERTARGET D3DUSAGE_DEPTHSTENCIL
D3DPOOL_DEFAULT x x
D3DPOOL_MANAGED
D3DPOOL_SCRATCH
D3DPOOL_SYSTEMMEM

 

pool D3DUSAGE_DYNAMIC D3DUSAGE_AUTOGENMIPMAP
D3DPOOL_DEFAULT x x
D3DPOOL_MANAGED x
D3DPOOL_SCRATCH
D3DPOOL_SYSTEMMEM x

 

Para obter mais informações sobre tipos de uso, consulte D3DUSAGE.

Os pools não podem ser misturados para objetos diferentes contidos em um recurso (níveis de mip em um mipmap) e, quando um pool é escolhido, ele não pode ser alterado.

Os aplicativos devem usar D3DPOOL_MANAGED para a maioria dos recursos estáticos, pois isso salva o aplicativo de ter que lidar com dispositivos perdidos. (Os recursos gerenciados são restaurados pelo runtime.) Isso é especialmente benéfico para sistemas de UMA (arquitetura de memória unificada). Outros recursos dinâmicos não são uma boa correspondência para D3DPOOL_MANAGED. Na verdade, buffers de índice e buffers de vértice não podem ser criados usando D3DPOOL_MANAGED junto com D3DUSAGE_DYNAMIC.

Para texturas dinâmicas, às vezes é desejável usar um par de texturas de memória do sistema e memória de vídeo, alocando a memória de vídeo usando D3DPOOL_DEFAULT e a memória do sistema usando D3DPOOL_SYSTEMMEM. Você pode bloquear e modificar os bits da textura de memória do sistema usando um método de bloqueio. Em seguida, você pode atualizar a textura da memória de vídeo usando IDirect3DDevice9::UpdateTexture.

Requisitos

Requisito Valor
parâmetro
D3D9Types.h

Confira também

Enumerações do Direct3D

D3DUSAGE

IDirect3DDevice9::CreateCubeTexture

IDirect3DDevice9::CreateIndexBuffer

IDirect3DDevice9::CreateTexture

IDirect3DDevice9::CreateVolumeTexture

IDirect3DDevice9::CreateVertexBuffer

D3DINDEXBUFFER_DESC

D3DSURFACE_DESC

D3DVERTEXBUFFER_DESC

D3DVOLUME_DESC