Partilhar via


Gerenciamento automático de textura (Direct3D 9)

O gerenciamento de texturas é o processo de determinar quais texturas são necessárias para renderização em um determinado momento e garantir que essas texturas sejam carregadas na memória de vídeo. Tal como acontece com qualquer algoritmo, os esquemas de gestão de textura variam em complexidade, mas qualquer abordagem à gestão de textura envolve as seguintes tarefas principais.

  • Controlar a quantidade de memória de textura disponível.
  • Calcular quais texturas são necessárias para renderização e quais não são.
  • Determinar quais recursos de textura existentes podem ser recarregados com outra imagem de textura e quais superfícies devem ser destruídas e substituídas por novos recursos de textura.

O Direct3D implementa o gerenciamento de texturas suportado pelo sistema para garantir que as texturas sejam carregadas para um desempenho ideal. Os recursos de textura gerenciados pelo Direct3D são chamados de texturas gerenciadas.

O gerenciador de texturas rastreia texturas com um carimbo de data/hora que identifica quando a textura foi usada pela última vez. Em seguida, ele usa um algoritmo menos usado recentemente para determinar quais texturas devem ser removidas. As prioridades de textura são usadas como critérios de desempate quando duas texturas são direcionadas para remoção da memória. Se duas texturas tiverem o mesmo valor de prioridade, a textura menos usada recentemente será removida. No entanto, se duas texturas tiverem o mesmo carimbo de data/hora, a textura que tiver uma prioridade mais baixa será removida primeiro.

Você solicita o gerenciamento automático de textura para superfícies de textura ao criá-las. Para recuperar uma textura gerenciada em um aplicativo C++, crie um recurso de textura chamando IDirect3DDevice9::CreateTexture e especificando a D3DPOOL_MANAGED para o parâmetro Pool. Você não tem permissão para especificar onde deseja que a textura seja criada. Não é possível usar os sinalizadores D3DPOOL_DEFAULT ou D3DPOOL_SYSTEMMEM ao criar uma textura gerenciada. Depois de criar a textura gerenciada, você pode chamar o método IDirect3DDevice9::SetTexture para defini-la para um estágio na cascata de textura do dispositivo de renderização.

Você pode atribuir uma prioridade às texturas gerenciadas chamando o método IDirect3DResource9::SetPriority para a superfície de textura.

O Direct3D transfere automaticamente texturas para a memória de vídeo, conforme necessário. O sistema pode armazenar em cache texturas gerenciadas na memória de vídeo local ou não local, dependendo da disponibilidade de memória de vídeo não local ou outros fatores. O local do cache de suas texturas gerenciadas não é comunicado ao seu aplicativo, nem essas informações são necessárias para usar o gerenciamento automático de texturas. Se o seu aplicativo usa mais texturas do que cabe na memória de vídeo, o Direct3D remove texturas mais antigas da memória de vídeo para abrir espaço para as novas texturas. Se você usar uma textura removida novamente, o sistema usará a superfície de textura original da memória do sistema para recarregar a textura no cache de memória de vídeo. Embora seja necessário recarregar a textura, também diminui o desempenho do aplicativo.

Você pode modificar dinamicamente a cópia original da memória do sistema da textura atualizando ou bloqueando o recurso de textura. Quando o sistema deteta uma superfície suja - após a conclusão de uma atualização ou quando a superfície é desbloqueada - o gerenciador de textura atualiza automaticamente a cópia da memória de vídeo da textura. O acerto de desempenho incorrido é semelhante ao recarregamento de uma textura removida.

Ao entrar em um novo nível em um jogo, seu aplicativo pode precisar liberar todas as texturas gerenciadas da memória de vídeo (chamando IDirect3DDevice9::EvictManagedResources).

Para obter mais informações sobre gerenciamento de recursos, consulte Gerenciando recursos (Direct3D 9).

de texturas Direct3D