【问题标题】:XNA Window Scaling PerformanceXNA 窗口缩放性能
【发布时间】:2010-08-19 17:32:19
【问题描述】:

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

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

但是,我现在想知道随着游戏变得越来越复杂,这是否会在未来再次咬我。

由于我必须在每次绘制时缩放所有内容(我只使用缩放因子缩放 SpriteBatch.Begin() 一次,完成所有绘制,然后调用 End()),这是否会对性能产生任何不利影响?我知道当本机设置为 720p 时,XBox 已经为您的 XNA 游戏执行此操作(实际上,我在 XBox 上运行时,它只是获得了适当的缩放因子)......所以我无法想象它太糟糕了,即使是 PC。

【问题讨论】:

    标签: c# windows graphics xna


    【解决方案1】:

    xbox 在视频输出中的专用缩放器中进行缩放 - 对您的应用的性能影响为零。

    你传递给 SpriteBatch 的比例因子只是转换你的精灵的顶点。即使您没有通过比例,它也以 1 的系数完成,因此那里没有额外的负载。

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

    仅使用 1028x720 后备缓冲区是最安全的做法。 xbox 可以在硬件上将其扩展到任何分辨率或比率,而无需一行代码或任何性能问题。它会正确信箱,硬件缩放器质量非常好。您不能声称 1080p 支持确实是唯一的缺点。

    如果您选择 1020x1080 作为后台缓冲区,请注意硬件缩放器无法将其缩小到 480i,并且会在同行评审中失败(如果有人注意到的话,应该会失败)

    在 WIndows 上,最简单的事情可能是将所有内容绘制到 RenderTarget,然后在最后一次缩放整个该死的东西。请参阅 SpaceWar starterkit,了解执行此操作所需的几行代码。 (全部在 #if !XBOX 内,因此您不会在 360 上浪费循环)

    【讨论】:

    • 为了澄清,Xbox 上的后台缓冲区是 1280x720,只是精灵是为 1080 绘制的,所以我仍然在 Begin() 调用中给出了比例因子。所以,虽然图形是为 1080p 创建的,但游戏仍然以 720 运行,所以,如果我理解正确的话,xbox 应该可以缩放到 480i 就好了……对吗?要点是如果可用的话,它有能力上升到 1080。如果我检测到它没有在 1080 运行,我也可以在 xbox 上设置为 720,对吧?
    • 如果您必须有 1080p,那么最好的办法是始终使后台缓冲区为 1920x1080p 并且不进行缩放。让硬件缩放器为您完成 - 它可能看起来比缩放单个元素更好。然后将 480 视为异常情况。没有简单的方法可以涵盖所有你想要的 1080
    • 除了你刚才说它不会在 1080p 的 XBox 上按比例缩小?目前我可能只会让 Xbox 只运行在 720,我只是希望能够仅在计算机上或以后在两者上扩展至 1080,但这样我的图形已经处于该分辨率。
    【解决方案2】:

    这不应该花费您。缩放由显卡完成。

    但是,如果这确实让您担心,处理不同分辨率的另一种选择是将渲染目标更改为屏幕外缓冲区,渲染到该缓冲区,然后在屏幕上绘制一个正方形,并将缓冲区作为纹理。渲染了更多像素,但您不需要对每个顶点进行变换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多