Gerenciamento automático de textura (Direct3D 9)
O gerenciamento de textura é 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. Assim como acontece com qualquer algoritmo, os esquemas de gerenciamento de textura variam em complexidade, mas qualquer abordagem para o gerenciamento de textura envolve as tarefas principais a seguir.
- Acompanhando a quantidade de memória de textura disponível.
- Calculando 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 textura com suporte do 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 desempates 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 tem 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 o 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-lo como um estágio na cascata de textura do dispositivo de renderização.
Você pode atribuir uma prioridade a texturas gerenciadas chamando o método IDirect3DResource9::SetPriority para a superfície de textura.
O Direct3D baixa automaticamente texturas na memória de vídeo, conforme necessário. O sistema pode armazenar texturas gerenciadas em cache na memória de vídeo local ou não local, dependendo da disponibilidade da memória de vídeo não local ou de outros fatores. O local de 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 textura. Se seu aplicativo usa mais texturas do que pode caber na memória de vídeo, o Direct3D remove texturas mais antigas da memória de vídeo para liberar espaço para as novas texturas. Se você usar uma textura removida novamente, o sistema usará a superfície de textura de memória do sistema original para recarregar a textura no cache de memória de vídeo. Embora o recarregamento da textura seja necessário, ele 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 detecta uma superfície de sujo - depois que uma atualização é concluída ou quando a superfície é desbloqueada - o gerenciador de textura atualiza automaticamente a cópia de memória de vídeo da textura. O impacto de desempenho incorrido é semelhante ao recarregamento de uma textura removida.
Ao inserir 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 o gerenciamento de recursos, consulte Gerenciando recursos (Direct3D 9).
Tópicos relacionados