2010-08-19 127 views
1

在我的XNA游戏中,我编程和设计1920x1080分辨率的整个东西,然后缩放比例和信箱以适应运行系统(XBox或PC)。XNA窗口缩放性能

这是一个很好的解决方案,因为它让我只需要担心一个解决方案。

但是,我现在想知道,随着游戏变得越来越复杂,是否会在未来再咬我。因为我不得不缩放每一次绘制的任何东西(我只用缩放因子缩放SpriteBatch.Begin()一次,完成所有绘制,然后调用End()),这是否会产生任何不利影响性能?我知道XBox已经为XNA游戏为你做了这个,当它设置为720p原生(这其实,我在XBox上运行,它只是得到适当的缩放因子)....所以我无法想象它太糟糕了,即使是PC。

回答

3

xbox在视频输出的专用缩放器中进行缩放 - 应用程序的性能命中率为零。

您传递给SpriteBatch的缩放因子只是转换了精灵的顶点。即使你不通过一个比例,它的因子也是1,所以没有额外的负载。

不同的屏幕尺寸会有不同的填充率(或多或少的像素),纹理查找也会不同,因此会显示一些差异。

只要使用1028x720 backbuffer是最安全的做法。 Xbox可以将硬件扩展为任何分辨率或比例,无需任何代码或任何性能问题。它会正确地信箱,硬件缩放器质量非常好。你不能声称1080p支持是唯一的缺点。

如果你选择了1020x1080作为后台缓冲区注意,在硬件缩放不能规模下来到480i和(如果有人注意到也应该)在同行评审会失败

在Windows上最容易的事情可能是画所有东西都放到RenderTarget中,然后在最后一次缩放整个织物。查看SpaceWar starterkit获取它所需的几行代码。 (所有#if!XBOX里面,所以你不要在360上浪费周期)

+1

为了说明Xbox IS 1280x720上的后台缓冲区,它只是绘制了1080的精灵图,所以我仍然在Begin()调用中给出一个缩放因子。所以,虽然图形是为1080p创建的,但游戏仍然只运行在720,所以,如果我理解正确,那么xbox应该缩放到480i就好了......正确吗?主要的一点是如果有可用的话,它可以提高到1080。如果我发现它没有在1080上运行,我也可以在xbox上设置为720,对吧? – 2010-08-19 18:10:07

+0

如果您必须拥有1080p,那么最好的做法是始终将后台缓冲区设置为1920x1080p并且不进行缩放。让硬件缩放器为你做 - 它可能会比缩放单个元素看起来更好。然后将480作为例外情况。 有没有简单的方法来覆盖你所想要的一切1080 – 2010-08-19 19:12:59

+0

除了你刚才说的它不会缩小在XBox去1080p?目前,我可能只是让XBox只能运行在720,我只是希望能够在电脑上或两者都可以扩展到1080,但这样我就已经有了这个分辨率的图形。 – 2010-08-19 19:23:10

0

这应该不会让你付出代价。缩放是由他的视频卡完成的。但是,如果这确实让你担心,处理不同分辨率的另一个选项是将渲染目标更改为屏幕外缓冲区,对其进行渲染,然后在屏幕上用缓冲区作为纹理绘制正方形。渲染更多像素,但不需要对每个顶点执行变换。