Trabalhando com vários sistemas de monitor (Direct3D 9)
O conceito de modo exclusivo de tela inteira é mantido no Direct3D 9, mas é mantido totalmente implícito nas chamadas de método IDirect3D9::CreateDevice e IDirect3DDevice9::Reset . Sempre que um dispositivo é redefinido ou criado com êxito na operação de tela inteira, o objeto Direct3D que criou o dispositivo é marcado como proprietário de todos os adaptadores nesse sistema. Esse estado é conhecido como modo exclusivo e, neste ponto, o objeto Direct3D possui modo exclusivo. O modo exclusivo significa que os dispositivos criados por qualquer outro objeto Direct3D9 não podem assumir a operação em tela inteira nem alocar memória de vídeo. Além disso, quando um objeto Direct3D9 assume o modo exclusivo, todos os dispositivos diferentes do dispositivo que passou por tela inteira são colocados no estado perdido. Para obter informações sobre como lidar com dispositivos perdidos, consulte Dispositivos perdidos (Direct3D 9).
Junto com o modo exclusivo, o objeto Direct3D9 é informado da janela de foco a ser usada pelo dispositivo. O modo exclusivo é liberado quando o último dispositivo de tela inteira pertencente a esse objeto Direct3D9 é redefinido para o modo de janela ou destruído.
Os dispositivos podem ser divididos em duas categorias quando um objeto Direct3D9 possui modo exclusivo. A primeira categoria de dispositivos são aqueles que foram criados pelo mesmo objeto Direct3D9 que criou o dispositivo que já está em tela inteira, têm a mesma janela de foco que o dispositivo que já está em tela inteira e representam um adaptador diferente de qualquer dispositivo de tela inteira. Os dispositivos nessa categoria não têm restrições relacionadas à capacidade de redefinição ou criação e não são colocados no estado perdido. Os dispositivos nessa categoria podem até mesmo ser colocados no modo de tela inteira.
Dispositivos não nessa categoria, que seriam aqueles criados por um objeto Direct3D9 diferente ou com uma janela de foco diferente, ou para algum adaptador com um dispositivo já em tela inteira não podem ser redefinidos e permanecem no estado perdido até que o modo exclusivo seja perdido.
A implicação prática é que um aplicativo de vários monitores pode colocar vários dispositivos no modo de tela inteira, mas somente se todos esses dispositivos forem para adaptadores diferentes, foram criados pelo mesmo objeto Direct3D9 e todos compartilham a mesma janela de foco.
Quando você cria um novo dispositivo usando o mesmo objeto IDirect3D9 e a janela de foco, seu dispositivo original perderá suas superfícies. Você precisará chamar IDirect3DDevice9::Reset no primeiro dispositivo para que seu aplicativo o use. Por exemplo, para criar dois dispositivos, faça o seguinte:
- Criar Dispositivo 1
- Criar Dispositivo 2
- Redefinir o Dispositivo 1
Tópicos relacionados