虽然正式版不会有窗口模式,但是还是想知道原因
2009/12/29 beck917 <bec...@gmail.com>:
> 是不是因为桌面色彩数量的原因...
>
--
侯健-用最大的努力 争取最大的成功
2009/12/28 jee <houj...@gmail.com>:
On Jan 2, 1:00 am, sili zhao <zhaos...@gmail.com> wrote:
> 我做这方面的,我猜是这样的,在窗口模式下,有一些程序会调用系统API来绘制界面刷新,而游戏也会,这些API估计一个时刻只能有一个线程(进程)进入,就是所有调用之间是串行的,这样如果有两个程序都是1?ms(一般游戏会限制在60FPS)刷新一次屏幕的话,有可能就会产生资源竞争,导致游戏卡掉帧。
你这个说法, 对 vista, windows 7 的 wddm 模式, 应该有一些关系, 如果是 xp, 那么应该不是这个, 显卡 d3d
全屏模式和窗口模式性能就不一样的.
> 而在全屏模式下,因为是独占的,就不会有这个问题了。
> 2009/12/28 jee <houjm...@gmail.com>
2010/1/3 redsea <red...@gmail.com>:
--
侯健-用最大的努力 争取最大的成功
“显卡 d3d 全屏模式和窗口模式性能就不一样的.”
这又是为什么呢? 难道绘制其他窗口这么费时??
先说性能,当一个应用程序全屏独占的时候,他的进程优先级会被升高,记得在Jeffrey
Richter的书里到过。所以,全屏模式下,游戏基于CPU的性能肯定是提升的,因为你获得更多了CPU时间片。而且由于游戏一般采用main
loop,所以所有的slice都会全部用掉。因此在强占系统下,你会拿到很多CPU,非常多。
再说掉帧,当你全屏运行时,你在调用Present时,Back buffer直接和Front
buffer互换,这个是发生在Vsync时,你不会看到屏幕撕裂,而且此时GDI和桌面系统几乎不介入,性能和效率都有提升,至于更多的行为要依据你的D3D
device的设置,比如最大支持延迟几帧等等。当窗口时,游戏只是一个普通的应用程序,你通过D3D生成了一些内容,内容放在程序对应的窗口的绘制区域,然后把区域提交给了桌面系统,剩下的你就管不了了,它不会在Vsync时才更新内容,它也不会去保持很高的帧速来更新内容。在前面一次提交给桌面的绘制内容没有被绘制时,你提交了下一次的,前面就被覆盖了,在你看来,你就丢了一帧。
大致如此。具体的细节很多。我脑子里很零散,没有总结过。
2010/1/9 up duan <fix...@gmail.com>:
--
Stay Hungry. Stay Foolish.