#bevy #applications #performance #gamedev #system #collection #improve

bevy_mod_speedup

bevy_mod_speedup是一个集合,旨在提高您应用程序的性能

4个版本 (破坏性)

0.4.0 2024年8月3日
0.3.0 2024年7月6日
0.2.0 2024年4月25日
0.1.0 2024年4月21日

#340 in 游戏开发

Download history 9/week @ 2024-04-28 89/week @ 2024-06-30 52/week @ 2024-07-07 2/week @ 2024-07-14 84/week @ 2024-07-28 46/week @ 2024-08-04 3/week @ 2024-08-11

每月133次下载

MIT/Apache

46KB
393

bevy_mod_speedup

License Crates.io Version Following released Bevy versions

bevy_mod_speedup是一个集合,旨在提高您应用程序的性能。

[!WARNING]
此插件处于非常早期的开发阶段。
预期将包含的功能和现有功能的API将发生重大变化。

描述

[!NOTE]
此存储库对添加新功能以及将现有功能扩展到其他平台持开放态度。
目前仅限于我在个人项目中使用的功能和可用平台。

bevy_mod_speedup包含了一系列技术,可以使您的游戏(或应用程序)更加高效。这主要是通过与其他游戏运行的系统进行交互来实现的。一个例子是调整系统的节能状态。提供的技术取决于所使用的平台。

此插件还提供了一些资源来检查“加速”状态。这使得应用程序能够对应用更改或调整失败做出反应。有关更多信息,请参阅此章节

[!WARNING]
这里实现的技术不一定总是能提高性能。
因此,建议在它们支持的平台上检查所有使用的功能。
还建议确保应用程序不依赖于此处提供的改进,因为这不能替代优化的代码。

此存储库还包括其他改进应用程序性能的技巧。有关其他技巧,请在此查看。这些技巧不能在库中实现,需要直接在您的项目中完成。

状态资源

资源SpeedupAdjustments可以用来检查调整的状态。每个功能都在资源中添加了一个与功能名称匹配的字段。这些字段是枚举,具有描述当前状态的变体。

功能

为了尽可能模块化,此库的大部分功能都由单独的功能控制。
其中大多数功能都通过默认启用的功能full_speed启用。
您可以在此表格中查看功能的可用性和它们在full_speed中的包含情况。

平台无关功能

这里描述的功能与所使用的平台无关。

功能:egui

为使用egui显示SpeedupAdjustments添加了一个便利方法。请参阅egui示例了解用法。

使用以下命令运行示例:cargo run --example egui --features="egui"

平台相关功能

不同平台的功能支持

full_speed Linux Windows
exclusive_fullscreen
power
priority
request_fast_gpu
unattended

图例
❔ = 需要评估
🔳 = 尚未实现
✅ = 已实现
❎ = 该平台不支持此功能

[!NOTE]
在平台不支持的功能上启用功能不会产生任何作用[^1]。

[^1]: 在某些情况下,除了日志条目外。

功能:exclusive_fullscreen

此功能尝试满足全屏独占的所有条件。全屏独占的应用程序可以绕过合成器并略微加快渲染速度。

仅靠此功能本身不足以实现全屏独占。它需要进一步的平台相关应用程序调整。

待办事项:添加有关实现全屏独占所需信息以及如何检查其是否工作。

  • Windows:调整DPI感知[^2]

[^2]: 可以通过“应用程序清单”设置。

功能:power

调整系统设置以禁用节能模式和/或使用高性能模式。

  • Windows:将电源计划设置为GUID_MIN_POWER_SAVINGS,在AppExit上恢复原始计划。

功能:priority

此功能尝试调整应用程序的优先级。

  • Linux:调整优先级为-5。仅适用于有权限的情况
  • Windows:调整优先级类别为ABOVE_NORMAL_PRIORITY_CLASS

功能:request_fast_gpu

在集成和专用GPU的硬件配置中,可能需要声明应用程序想要使用专用GPU。

Windows

在Windows上,这可以通过在应用程序中声明特殊导出来实现。由于这不能从库中完成,您必须向应用程序添加额外的代码以使用此功能。以下两个步骤是必需的

  • 在您的应用程序中调用宏request_fast_gpu!()

  • 在您的build.rs中添加以下代码以导出添加的变量。

    println!("cargo:rustc-link-arg=/EXPORT:NvOptimusEnablement");
    println!("cargo:rustc-link-arg=/EXPORT:AmdPowerXpressRequestHighPerformance");
    

您可以使用dumpbin /exports $APPLICATION.exe检查导出。

功能:unattended

此功能允许应用程序无限制地无人值守运行。这意味着禁用屏保、休眠和类似功能。

  • Windows:使用SetThreadExecutionState,使用ES_CONTINUOUS | ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED

安装

通过将其添加到您的Cargo.toml将库包含到您的项目中。

[dependencies]
bevy = "0.14.0"
bevy_mod_speedup = "0.3.0"

然后按照以下示例将SpeedupPlugin添加到您的应用程序中。

use bevy::prelude::*;
use bevy_mod_speedup::SpeedupPlugin;

fn main(){
  App::new()
    .add_plugins(SpeedupPlugin)
    .run();
}

其他性能提示

待办事项

进一步阅读/参考

贡献

欢迎贡献。对于较大的更改,请首先打开一个问题。

您的贡献

除非明确说明,否则向本项目的任何贡献都应双重许可,在以下协议下,不附加任何额外条款或条件:MIT 许可证Apache 许可证,版本 2.0

许可证

本存储库中的所有代码都双重许可以下协议之一

Bevy 兼容性

bevy bevy_mod_speedup
0.14.1 0.4.0
0.14.0 0.3.0
0.13.1 0.1.0 - 0.2.0

依赖项

~18–59MB
~1M SLoC