Gerenciando recursos de dispositivos
Há dois tipos básicos de recursos no Direct3D móvel gerenciada de programação: aqueles que precisam ser recriados quando um dispositivo é redefinido e os que não.Vários tipos de objeto podem ou não podem ser preenchidos com dados quando um dispositivo redefine.Diferentemente do Direct3D em aplicativos de computador desktop, o pool de memória usada para a criação de um recurso não é um fator em que um recurso deve ser recriado quando um dispositivo for redefinida.
Memória pool
Existem três pools de memória disponíveis em programação Direct3D móvel gerenciada:
Sistema
Aloca na memória do sistema normal no dispositivo móvel, que é geralmente mais lento para usar que memória de vídeo.
Vídeo
Aloca uma área de memória que é principalmente para uso por hardware de vídeo no dispositivo móvel.Em alguns dispositivos, a memória de vídeo pode ser um recurso altamente restrito.
Memória gerenciada
Aloca memória de vídeo como um cache de memória do sistema.O driver pode usar vários algoritmos, incluindo o algoritmo LRU de substituição (recentemente menos usado), para implementar o esquema de cache.
Quando uma textura ou outro recurso for criado no pool gerenciado, espaço é alocado no pool de memória do sistema para a textura.Quando a textura é atribuída a um preparar de textura com o SetTexture método, a textura é carregado para o pool de memória de vídeo e mantido até que ela se torne o item menos usado e seja eventualmente removida para liberar espaço para outro recurso. Quando um room necessita ser feito em memória de vídeo para carregar uma superfície gerenciada, e nenhum item atende a definição LRU, o driver deve utiliza a Priority propriedade para determinar quais gerenciado recurso de memória remover da memória de vídeo.
Você pode criar VertexBuffer, IndexBuffer, e Texture recursos em pool gerenciado, mas não buffers frontal e traseiro, buffers de profundidade e superfícies imagem.
Você pode usar uma instância do SurfaceCaps estrutura para determinar quais pools memória estão acessíveis quando você criar um recurso.
Um dispositivo móvel pode oferecer suporte a pools de memória diferentes para diferentes tipos de recursos.Drivers de vídeo indicam seu suporte para o pool de recursos gerenciado com o SupportsManagedPool propriedade de um SurfaceCaps. Se essa propriedade for true, o dispositivo suporta pool gerenciado para VertexBuffer, IndexBuffer, e Texture recursos. Um aplicativo não é possível criar uma superfície do pool gerenciado se o driver não suporta pool gerenciado.Se o dispositivo oferece suporte para o sistema e de pools de memória de vídeo para texturas, o aplicativo pode implementar sua própria memória cache de esquema usando o UpdateTexture método.
O aplicativo também pode forçar uma superfície para ser pré-carregada na memória de vídeo com o PreLoad método de um Resource. Esse método faz com que os bytes necessários para serem descartados e a superfície a ser carregada imediatamente.
Finalmente, o aplicativo também pode forçar o recurso gerenciado a descartar um determinado número de bytes com o ResourceManagerDiscardBytes método de um Device. Este método é o número de bytes para descartar sistema autônomo um argumento.Se o aplicativo passa 0, todos os bytes gerenciado na memória de vídeo serão descartadas.
Todos os métodos que controlam o Gerenciador de recursos agem imediatamente; eles não são armazenados no buffer do comando.Além disso, eles falham se o dispositivo não dá suporte para o Pool gerenciado.
Instâncias de Objetos e Tempos de vida
Ao gerenciar definições do dispositivo e Usar buffers indexados ou buffers vértice, você deve usar o construtor apropriado para que os objetos sejam criados com os tempos de vida propriados.
Windows Mobile Direct3D oferece suporte a apenas um Device instância de cada vez em um Pocket PC ou Smartphone. Você pode usar o ReleaseD3DMobile método estático de um Manager Para remover todos os recursos do dispositivo Direct3D para que você pode iniciar outro aplicativo Windows Mobile Direct3D no mesmo Pocket PC ou Smartphone.
Os seguintes objetos devem ser recriados quando um Device é reiniciar. A recriação pode ser executada em um manipulador de eventos para o DeviceReset evento.
Texture objetos.
Mesh objetos.
Surface objetos.
VertexBuffer objetos criados com o VertexBuffer(Device, Int32, Usage, VertexFormats, Pool) construtor.
IndexBuffer objetos criados com o IndexBuffer(Device, Int32, Usage, Pool, Boolean) construtor.
Os seguintes objetos não precisam ser recriados quando um Device é reiniciar:
Font objetos.
Sprite objetos.
VertexBuffer objetos criados com o VertexBuffer(Type, Int32, Device, Usage, VertexFormats, Pool) construtor.
IndexBuffer objetos criados com o IndexBuffer(Type, Int32, Device, Usage, Pool) construtor.
Font e Sprite objetos executam automaticamente todas as ações necessárias em resposta ao reiniciar do dispositivo.
The IndexBuffer e VertexBuffer objetos recriam eles próprios automaticamente quando um dispositivo é reiniciar, mas eles não terão dados dentro deles. Você pode definir um manipulador de eventos para o IndexBuffer.Created evento ou VertexBuffer.Created evento para preencher o buffer vértice ou indexado com dados após o dispositivo é redefinido.