gpt4 book ai didi

c# - 优化 XNA 上的颜色操作

转载 作者:太空狗 更新时间:2023-10-29 23:42:36 24 4
gpt4 key购买 nike

我正在分析我的简单 2D XNA 游戏。我发现整个运行时间的 4% 是通过将两个 Colors 相加的简单操作占用的,其中一个首先乘以 float。

我需要每帧大量调用此方法 2000 次(对于 map 上的每个图 block ),对于 XNA 的 60 fps,这给了我每秒 120000 次。即使是对单个调用的最小提升也会产生巨大的速度影响。但是我只是不知道如何才能使它更有效

    private void DoColorCalcs(float factor, Color color)
{
int mul = (int)Math.Max(Math.Min(factor * 255.0, 255.0), 0.0);
tile.Color = new Color(
(byte)Math.Min(tile.Color.R + (color.R * mul / 255), 255),
(byte)Math.Min(tile.Color.G + (color.G * mul / 255), 255),
(byte)Math.Min(tile.Color.B + (color.B * mul / 255), 255));

}

编辑:根据 Michael Stum 的建议:

    private void DoColorCalcs(float factor, Color color)
{
factor= (float)Math.Max(factor, 0.0);
tile.Color = new Color(
(byte)Math.Min(tile.Color.R + (color.R * factor), 255),
(byte)Math.Min(tile.Color.G + (color.G * factor), 255),
(byte)Math.Min(tile.Color.B + (color.B * factor), 255));
}

这将时间使用率从 4% 降低到 2.5%

最佳答案

我的第一个问题是,为什么要 float ?如果您只是缩放颜色以使其褪色,则不需要太精确。示例:

int factorTimes256;
tile.Color.R = Math.Max(255, tile.Color.R + (color.R * factorTimes256) / 256);
// same for G and B

换句话说,将您的因子表示为 0 到 256 之间的整数,并在整数上进行所有计算。您不需要比 8 位更高的精度,因为结果只有 8 位。

我的第二个问题是,你是说你在这段代码中从 4% 变成了 2.5% 吗?那是微小的。使用仅进行检测或对程序计数器进行采样的分析器的人通常对这种小改进感到满意。我敢打赌你还有其他事情要花很多时间,你可以攻击。 Here's an example of what I mean.

关于c# - 优化 XNA 上的颜色操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1929753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com