Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O gerenciamento de recursos é o processo em que os recursos são promovidos do armazenamento de memória do sistema para o armazenamento acessível pelo dispositivo e descartados do armazenamento acessível pelo dispositivo. O tempo de execução do Direct3D tem o seu próprio algoritmo de gestão baseado numa técnica de prioridade de menos recentemente usado. O Direct3D muda para uma técnica de prioridade mais recentemente usada quando deteta que mais recursos do que o que a memória acessível pelo dispositivo pode suportar são usados em um único quadro - entre as chamadas de IDirect3DDevice9::BeginScene e IDirect3DDevice9::EndScene.
Use o sinalizador D3DPOOL_DEFAULT no momento da criação para especificar que um recurso seja colocado no pool de memória mais apropriado para o conjunto de usos solicitados para determinado recurso. Normalmente, trata-se de memória de vídeo, incluindo memória de vídeo local e memória de porta gráfica acelerada (AGP). Os recursos no pool padrão não persistem durante as transições entre os estados de perda e operação do dispositivo. Esses recursos devem ser libertados antes de chamar o reset e, em seguida, devem ser recriados.
Use o sinalizador D3DPOOL_MANAGED no momento da criação para especificar um recurso gerenciado. Os recursos gerenciados persistem por meio de transições entre os estados perdido e operacional do dispositivo. Esses recursos existem tanto no vídeo quanto na memória do sistema. Um recurso gerenciado será copiado para a memória de vídeo quando for necessário durante a renderização. O dispositivo pode ser restaurado com uma chamada para IDirect3DDevice9::Reset, e esses recursos continuam a funcionar normalmente sem serem recarregados com dados. No entanto, se o dispositivo deve ser destruído e recriado, todos os recursos devem ser recriados.
A gestão de recursos não é recomendada para recursos que mudam com grande frequência. Por exemplo, os buffers de vértice e índice que são usados para percorrer um gráfico de cena a cada frame renderizam apenas a geometria visível para o utilizador e mudam a cada frame. Como os recursos gerenciados são apoiados pela memória do sistema, as alterações constantes devem ser atualizadas na memória do sistema, o que pode causar uma grave degradação no desempenho. Para este cenário específico, D3DPOOL_DEFAULT juntamente com D3DUSAGE_DYNAMIC devem ser usados.
Outro exemplo para o qual o gerenciamento de recursos não é recomendado (e explicitamente não permitido pelo tempo de execução) é o gerenciamento de uma textura criada com D3DUSAGE_RENDERTARGET. Se a memória usada pelos destinos de renderização fosse gerenciada pelo tempo de execução, seu conteúdo teria que ser constantemente copiado para a memória do sistema durante a renderização, causando grandes penalidades de desempenho. Por esse motivo, os destinos de renderização devem ser criados no pool padrão. Se o acesso da CPU aos dados contidos em um destino de renderização for necessário, os dados deverão ser copiados para um recurso criado no D3DPOOL_SYSTEMMEM usando IDirect3DDevice9::UpdateTextureou IDirect3DDevice9::UpdateSurface
Para obter mais informações sobre o estado perdido de um dispositivo, consulte Lost Devices (Direct3D 9).
Tópicos relacionados