在XNA2.0当中,显示设备也被虚拟化了,很抽象的概念吧?看看后面的解释就知道了。
在XNA1.0当中
在游戏启动的时候,XNA框架将调用LoadGraphicsContent(true),通知你把所有的纹理,顶点缓冲,渲染对象创建好,。如果游戏中运行当中在全屏模式和窗口模式中来回切换,或者其他的程序需要占用显示设备,我们将丢失设备,所有的Draw操作就将不可用执行,当游戏重新获得窗口的时候,有的资源将变得无效,例如,ResourceManagementMode.Manual的纹理和顶点缓冲,渲染对象都将无效,普通的纹理和顶点缓冲还有特效(effect)仍然有效。在这样的时候,xna框架将调用LoadGraphicsContent(false),通知游戏需要重新载入资源,尽管还有一些是有效的。
在XNA2.0当中
所以和显示设备相关联的对象都永远保持有效,而LoadGraphicsContent函数仅仅在游戏启动时会被执行一次。你不需要时刻关心游戏时候仍然独占显卡,关心什么时候应该去重新载入资源,这一切工作XNA2.0框架都将替你代劳
在XBox360当中
根本没有必要考虑这个问题,因为游戏机是单任务的,不会有丢失设备的问题。
好了,现在可以说最开始的问题了,所谓的虚拟化,就是显示设备对于游戏程序来说已经是永远可用的了。显然实际上并不是这样,但在XNA2.0的包装下,游戏访问的是一个虚拟的显示设备,它是永远可用的,原来写程序时候需要时刻关心的设备丢失问题已经被XNA2.0帮你处理好了。