我的任务是构建一个实时的“全屏”演示,以在5x2的60+英寸LED电视阵列上运行;或者换句话说,在20兆像素的显示器上运行。
我们有一台可以运行单个Win7桌面的机器,可以在整个显示器上以全分辨率运行,还提供一些相当不错的视频卡。
我的问题是:除了我的像素着色器将要进行的大量工作之外,DX10。*是否还有其他限制会在这里发挥作用,而不会在更大的视口中起作用?直到下周,我才可以使用该硬件,但是到那时我想写点东西,可以用来对系统进行基准测试。
更新资料
虽然我设法在一堆机器上使用一堆AMD EyeFinity(6输出)卡来工作-为了使事情顺利进行,但最简单的方法竟然是在每个显示器上都创建一个DX窗口,因为它具有一个窗口范围显示导致了一些性能问题-通过在一组计算机上分配任务,我也使它运行得很好,每台计算机都驱动两个显示器。
这非常容易。对于我的测试XNA应用程序,我添加了一个GameComponent来捕获一些游戏状态(相机位置/方向等),并以帧为单位在本地子网中对其进行UDP垃圾邮件。
该组件具有一个Mode
开关(发送或接收)。如果处于Receive
模式下,它将捕获UDP数据报,并使用来自发送方的信息更新游戏状态。Send
模式仅发送状态数据包,并通过服务/守护程序使节点启动或停止客户端应用程序。任何客户端都可以充当“主”,并且将客户端切换为Send
模式会要求所有其他节点切换为Receive
。有趣的是,人们在争夺控制权时会发生什么。
另一个好处是:我创建了一个控制台应用程序,该应用程序处理一系列关键帧状态定义(位置,时间等),并根据需要进行插值,并使用与游戏引擎相同的代码发送它们。这使我可以轻松地编写脚本动作,从Web浏览器提交转换等。
总而言之,花了大约50行代码来保持应用程序的多个副本同步运行。一些额外的复杂性来自为每台机器偏移相机的位置并纠正一些透视/投影烦恼,但是大部分归结为每个节点的配置文件。