Fui encarregado de criar uma demonstração em "tela cheia" em tempo real para rodar em uma matriz de 5x2 de TVs LED com mais de 60 polegadas: ou, em outras palavras, uma tela de 20 megapixels.
Nós construímos uma máquina que pode executar uma única área de trabalho Win7 distribuída pelos monitores em resolução máxima e algumas placas de vídeo bastante decentes.
Minha pergunta é: além da quantidade ridícula de trabalho que meus pixel shaders farão, existem outras limitações do DX10. * Que entrariam em jogo aqui que não teriam uma viewport de tamanho mais saudável? Não terei acesso ao hardware até a próxima semana, mas gostaria de ter algo escrito até então que possa ser usado para comparar o sistema.
Atualizar
Embora eu tenha conseguido fazer isso funcionar em uma única máquina com várias placas AMD EyeFinity (6 saídas) - para manter as coisas funcionando sem problemas, a maneira "mais fácil" acabou por ser criar uma janela DX por tela, como mostra uma extensão de janela causou alguns problemas de desempenho - eu também o fiz funcionar muito bem distribuindo a tarefa por um grupo de máquinas, cada uma delas dirigindo dois monitores.
Foi surpreendentemente fácil. Para o meu aplicativo XNA de teste, adicionei um GameComponent que captura algum estado do jogo (posição / orientação da câmera etc.) e o UDP envia spam pela sub-rede local por quadro.
Esse componente possui um Mode
comutador (enviar ou receber). Se estiver no Receive
modo, ele captura datagramas UDP e atualiza o estado do jogo com as informações do remetente. Send
O modo apenas envia pacotes de estado e, por meio de um serviço / daemon, faz com que os nós iniciem ou parem o aplicativo cliente. Qualquer cliente pode atuar como um "mestre", e a mudança de um cliente para o Send
modo solicita a entrada de todos os outros nós Receive
. É muito divertido ver o que acontece quando as pessoas estão brigando por controle.
Outro benefício interessante: criei um aplicativo de console que processa uma série de definições de estado do quadro-chave - local, horário etc. - interpola conforme necessário e as envia usando o mesmo código usado no mecanismo de jogo. Isso me permite facilmente mover scripts, enviar transformações a partir de um navegador da web etc.
Em suma, foram necessárias cerca de 50 linhas de código para manter várias cópias do aplicativo em execução em sincronia. Alguma complexidade adicional veio da alteração da posição da câmera de cada máquina e da correção de alguns aborrecimentos de perspectiva / projeção, mas a maior parte se resumiu a um arquivo de configuração por nó.