Compartilhar via


Lost Devices

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

Dispositivo A Microsoft® Direct3D® Mobile pode estar em um estado operacional ou um estado perdido. O estado operacional é o estado normal do dispositivo; o dispositivo executa e apresenta todos os processamento conforme o esperado. O dispositivo faz uma transição para o estado perdido quando um evento — como a perda de foco do teclado em um total-aplicativo Tela — faz com que processamento se torne impossível. O estado perdido é caracterizado pela falha silenciosa de todas as operações processamento, o que significa que os métodos processamento podem retornar códigos de sucesso even though as operações processamento falhar. Nessa situação, o código de erro D3DMERR_DEVICELOST (consulte D3DMERR Values) será retornado por IDirect3DMobileDevice::Present.

Por design, o conjunto completo de cenários que podem causar um dispositivo seja perdido não for especificado. Alguns exemplos típicos incluem a perda de foco ou quando um diálogo sistema é inicializado. Dispositivos também podem ser perdidos devido a um evento gerenciamento de energia, ou quando outro aplicativo assume completo-operação Tela. Além disso, qualquer falha de IDirect3DMobileDevice::Reset coloca o dispositivo em um estado perdido.

Responder a um dispositivo perdido

Para todas as plataformas

Se um dispositivo for perdido, o aplicativo consulta o dispositivo para ver se ele pode ser restaurado para o estado operacional. Caso contrário, o aplicativo espera até que o dispositivo pode ser restaurado.

Se o dispositivo pode ser restaurado, o aplicativo prepara o dispositivo pelo destruir todos vídeo-memória recursos e qualquer cadeias trocar. Em seguida, o aplicativo chama o método IDirect3DMobileDevice::Reset. Redefinir é o único método que tem um efeito quando um dispositivo é perdido, e é o único método pelo qual um aplicativo pode alteração de dispositivo de um Perdidos para um estado operacional. Redefinir falhará a menos que o aplicativo libera todos os recursos que são alocados em D3DMPOOL_VIDEOMEM (consulte D3DMPOOL), incluindo aqueles criados pelo IDirect3DMobileDevice::CreateRenderTarget e IDirect3DMobileDevice::CreateDepthStencilSurface métodos.

Na maioria das vezes, o alto-chamadas freqüência do Mobile Direct3D não retornam quaisquer informações sobre como se o dispositivo foi perdido. O aplicativo pode continuar a chamar processamento métodos, como IDirect3DMobileDevice::DrawPrimitive, sem receber notificação de um dispositivo perdido. Internamente, essas operações são descartadas até que o dispositivo esteja redefinir para o estado operacional.

Em todos os casos, destruir vídeo-memória recursos é um pré-requisito para chamado Redefinir, mesmo se o dispositivo não foi perdido.

Para Windows incorporado CE

O aplicativo pode determinar o que fazer em encontrar um dispositivo perdido consultando a valor de retorno do método IDirect3DMobileDevice::TestCooperativeLevel.

  • Se o método retornará D3DM_OK, o dispositivo está operacional.
  • Se o dispositivo é perdido, mas não pode ser restaurado no atual tempo, o valor de retorno é D3DMERR_DEVICELOST. Esta é a maiúsculas e minúsculas quando um total - dispositivo Tela perde foco. Os aplicativos devem responder por pausa até que o dispositivo pode ser redefinir. Um código de retorno D3DMERR_DEVICENOTRESET de TestCooperativeLevel indica essa situação.
  • Se o dispositivo for perdido e pode ser restaurado, o código de retorno do TestCooperativeLevel é D3DMERR_DEVICENOTRESET. Observe que a código de retorno do método IDirect3DMobileDevice::Present ainda é D3DMERR_DEVICELOST.

Perdido dispositivos e operações proteção

Internamente, Mobile Direct3D não suficiente trabalho para garantir que uma operação bloqueio funcionará depois que um dispositivo for perdido. No entanto, não é garantido que o vídeo-dados do recurso memória será precisos durante operação de bloqueio. Ele é garantido que nenhuma código de erro será retornado. Isso permite que os aplicativos a serem gravados sem preocupação para dispositivo perda durante uma operação bloqueio.

Dispositivos e recursos perdidos

Recursos podem consumir vídeo memória. Porque um dispositivo perdido for desconectado a partir de vídeo memória pertencentes a adaptador, ele não é possível garantir alocação do vídeo memória quando o dispositivo é perdido. Como resultado, todos os métodos de criação recurso são implementados para êxito, retornando D3DM_OK, mas na verdade alocar somente fictício memória sistema. Porque qualquer vídeo-recurso memória deve ser destruído antes o dispositivo é redimensionado, há não emitir de over-allocating vídeo memória. Esses fictício superfícies permitem bloqueio e copiar as operações parece função normalmente até que o aplicativo chama IDirect3DMobileDevice::Present e descobre que o dispositivo foi perdido.

Todos os vídeo memória deve ser lançada antes de um dispositivo pode ser redefinir de um estado perdido para um estado operacional. Isso significa que o aplicativo deve versão qualquer cadeias trocar criadas com IDirect3DMobileDevice::CreateAdditionalSwapChain e quaisquer recursos colocados na classe de memória D3DMPOOL_VIDEOMEM. O aplicativo necessário não versão recursos as classes memória D3DMPOOL_MANAGED ou D3DMPOOL_SYSTEMMEM. Outros dados do estado é automaticamente destruídos pela transição para um estado operacional.

Você está encorajado a desenvolver aplicativos com um caminho único codificar para responder a perda dispositivo. Esse caminho codificar é provável que seja semelhante, se não idênticos, para o caminho codificar tomado para inicializar o dispositivo na inicialização.

Dispositivos perdidos e Retrieved dados

Direct3D Mobile permite que aplicativos copiar gerado ou escritas anteriormente imagens de vídeo - recursos memória ao sistema voláteis - memória recursos. Porque as imagens origem de tais transferências podem ser perdidas a qualquer momento, Direct3D Mobile permite tais operações copiar falhar quando o dispositivo é perdido.

A copiar operação IDirect3DMobileDevice::CopyRects pode retornar D3DMERR_DEVICELOST quando o objeto origem estiver em memória volátil (D3DMPOOL_VIDEOMEM) e o objeto destino estiver na memória voláteis (D3DMPOOL_SYSTEMMEM ou D3DMPOOL_MANAGED). Outra operação copiar, IDirect3DMobileDevice::GetFrontBuffer, pode falhar devido a recuperando dados do primário superfície. Observe que esses casos são a instância única de D3DMERR_DEVICELOST outside of os métodos IDirect3DMobileDevice::Present IDirect3DMobileDevice::Reset e. Uma instância mais está em Windows Embedded CE método IDirect3DMobileDevice::TestCooperativeLevel.

See Also

Concepts

Direct3D Mobile Devices