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 游戏开发
每月133次下载
46KB
393 行
bevy_mod_speedup
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