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.
Você pode hospedar conteúdo Direct3D9 usando a D3DImage classe. Hospedar conteúdo Direct3D9 pode afetar o desempenho do seu aplicativo. Este tópico descreve as práticas recomendadas para otimizar o desempenho ao hospedar conteúdo Direct3D9 em um aplicativo WPF (Windows Presentation Foundation). Essas práticas recomendadas incluem como usar D3DImage e práticas recomendadas quando você estiver usando o Windows Vista, Windows XP e monitores múltiplos.
Observação
Para obter exemplos de código que demonstram essas práticas recomendadas, consulte Interoperação WPF e Direct3D9.
Use o D3DImage com moderação
O conteúdo Direct3D9 hospedado em uma D3DImage instância não é renderizado tão rápido quanto em um aplicativo Direct3D puro. Copiar a superfície e esvaziar o buffer de comandos podem ser operações dispendiosas. À medida que o número de D3DImage instâncias aumenta, ocorre mais descarga e o desempenho diminui. Portanto, você deve usar D3DImage com moderação.
Práticas recomendadas no Windows Vista
Para obter o melhor desempenho no Windows Vista com um monitor configurado para usar o WDDM (Windows Display Driver Model), crie sua superfície Direct3D9 em um IDirect3DDevice9Ex dispositivo. Isso permite o compartilhamento de superfície. A placa de vídeo deve suportar os recursos do controlador D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES e D3DCAPS2_CANSHARERESOURCE no Windows Vista. Quaisquer outras configurações fazem com que a superfície seja copiada através de software, o que reduz significativamente o desempenho.
Observação
Se o Windows Vista tiver um ecrã configurado para utilizar o Windows XP Display Driver Model (XDDM), a superfície é sempre copiada através de software, independentemente das definições. Com as configurações e a placa de vídeo adequadas, você verá um melhor desempenho no Windows Vista quando usar o WDDM porque as cópias de superfície são executadas no hardware.
Práticas recomendadas no Windows XP
Para obter o melhor desempenho no Windows XP, que usa o Windows XP Display Driver Model (XDDM), crie uma superfície bloqueável que se comporte corretamente quando o IDirect3DSurface9::GetDC método é chamado. Internamente, o método transfere BitBlt a superfície entre dispositivos de hardware. O GetDC método sempre funciona em superfícies XRGB. No entanto, se o computador cliente estiver executando o Windows XP com SP3 ou SP2 e se o cliente também tiver o hotfix para o recurso de janela em camadas, esse método só funciona em superfícies ARGB. A placa gráfica deve suportar a capacidade do driver D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES.
Uma profundidade de ecrã de ambiente de trabalho de 16 bits pode reduzir significativamente o desempenho. Recomenda-se um ambiente de trabalho de 32 bits.
Se você estiver desenvolvendo para Windows Vista e Windows XP, teste o desempenho no Windows XP. Ficar sem memória de vídeo no Windows XP é uma preocupação. Além disso, D3DImage no Windows XP usa mais memória de vídeo e largura de banda do que o Windows Vista WDDM, devido a uma cópia de memória de vídeo extra necessária. Portanto, você pode esperar que o desempenho seja pior no Windows XP do que no Windows Vista para o mesmo hardware de vídeo.
Observação
XDDM está disponível no Windows XP e Windows Vista; no entanto, o WDDM está disponível apenas no Windows Vista.
Melhores Práticas Gerais
Ao criar o dispositivo, use o sinalizador de criação D3DCREATE_MULTITHREADED. Isso reduz a performance, mas o sistema de renderização WPF chama métodos neste dispositivo a partir de um processo paralelo. Certifique-se de seguir o protocolo de bloqueio corretamente, para que não haja dois threads acessando o dispositivo ao mesmo tempo.
Se a renderização for processada em um thread gerido pelo WPF, é altamente recomendável que crie o dispositivo com o sinalizador de criação D3DCREATE_FPU_PRESERVE. Sem essa configuração, a renderização D3D pode reduzir a precisão das operações de precisão dupla do WPF e introduzir problemas de renderização.
Azulejar um D3DImage é rápido, a menos que você azuleje uma superfície não-pow2 sem suporte de hardware, ou se azulejar um DrawingBrush ou VisualBrush que contenha uma superfície D3DImage.
Práticas recomendadas para ecrãs multi-monitores
Se estiver a utilizar um computador com vários monitores, deve seguir as práticas recomendadas descritas anteriormente. Há também algumas considerações adicionais de desempenho para uma configuração de vários monitores.
Quando você cria o buffer traseiro, ele é criado em um dispositivo específico e adaptador, mas WPF pode exibir o buffer frontal em qualquer adaptador. Copiar entre adaptadores para atualizar o buffer frontal pode ser muito caro. No Windows Vista que está configurado para usar o WDDM com várias placas de vídeo e com um dispositivo IDirect3DDevice9Ex, se o buffer frontal estiver num adaptador diferente, mas ainda na mesma placa de vídeo, não haverá penalidade de desempenho. No entanto, no Windows XP e no XDDM com várias placas de vídeo, há uma penalidade de desempenho significativa quando o buffer frontal é exibido em um adaptador diferente do buffer traseiro. Para obter mais informações, consulte Interoperação WPF e Direct3D9.
Resumo do desempenho
A tabela a seguir mostra o desempenho da atualização do buffer frontal em função do sistema operacional, formato de pixel e capacidade de bloqueio de superfície. Presume-se que o buffer frontal e o buffer traseiro estejam no mesmo adaptador. Dependendo da configuração do adaptador, as atualizações de hardware são geralmente muito mais rápidas do que as atualizações de software.
| Formato de píxeis do Surface | Windows Vista, WDDM e 9Ex | Outras configurações do Windows Vista | Windows XP SP3 ou SP2 com hotfix | Janelas XP SP2 |
|---|---|---|---|---|
| D3DFMT_X8R8G8B8 (não bloqueável) | Atualização de hardware | Atualização de Software | Atualização de Software | Atualização de Software |
| D3DFMT_X8R8G8B8 (bloqueável) | Atualização de hardware | Atualização de Software | Atualização de hardware | Atualização de hardware |
| D3DFMT_A8R8G8B8 (não bloqueável) | Atualização de hardware | Atualização de Software | Atualização de Software | Atualização de Software |
| D3DFMT_A8R8G8B8 (bloqueável) | Atualização de hardware | Atualização de Software | Atualização de hardware | Atualização de Software |
Ver também
.NET Desktop feedback