25个稳定版本
2.1.0 | 2024年3月25日 |
---|---|
2.0.0 | 2023年11月5日 |
1.12.0 | 2023年3月19日 |
1.9.0 | 2022年11月26日 |
1.0.7 | 2021年3月4日 |
在 图形API 中排名 28
每月下载 592 次
用于 6 crate
1MB
11K SLoC
Speedy2D
具有易于使用的API的形状、图像和文本的硬件加速绘制。
Speedy2D旨在成为
- 创建窗口、渲染图形/文本和处理输入的最简单的Rust API
- 与支持OpenGL 2.0+或WebGL 2.0的任何设备兼容。计划支持OpenGL ES 2.0+
- 非常快
支持Windows、Mac、Linux和WebGL。Android和iOS的支持正在开发中。
默认情况下,Speedy2D包含设置具有OpenGL上下文的窗口和接收输入事件的支撑。如果您想自己处理,并且只想使用Speedy2D进行渲染,您可以禁用windowing
功能。
有用链接
- 文档和入门指南: https://docs.rs/speedy2d
- crate: https://crates.io/crates/speedy2d
特性
Windows | Mac | Linux | Web | |
---|---|---|---|---|
绘制2D形状 | ✔️ | ✔️ | ✔️ | ✔️ |
加载字体并绘制文本 | ✔️ | ✔️ | ✔️ | ✔️ |
加载并绘制图像 | ✔️ | ✔️ | ✔️ | ✔️ |
鼠标事件 | ✔️ | ✔️ | ✔️ | ✔️ |
键盘事件 | ✔️ | ✔️ | ✔️ | ✔️ |
全屏 | ✔️ | ✔️ | ✔️ | ✔️ |
窗口控制 | ✔️ | ✔️ | ✔️ | ℹ️ 部分支持 |
DPI/缩放更改事件 | ✔️ | ✔️ | ✔️ | ✔️ |
系统时钟/定时器 | ✔️ | ✔️ | ✔️ | ✔️ |
示例代码
示例项目可以通过以下命令运行:cargo run --example=hello_world
(只需将hello_world
更改为示例源文件的名称)。
快速入门(Windows/Mac/Linux)
步骤 1: 将Speedy2D添加到你的Cargo.toml
依赖项
[dependencies]
speedy2d = "2.1.0"
步骤 2: 创建一个窗口
use speedy2d::Window;
let window = Window::new_centered("Title", (640, 480)).unwrap();
步骤 3: 创建一个实现WindowHandler
trait的结构体。重写你感兴趣的任何回调,例如 on_draw()
、on_mouse_move()
或 on_key_down()
。
use speedy2d::color::Color;
use speedy2d::window::{WindowHandler, WindowHelper};
use speedy2d::Graphics2D;
struct MyWindowHandler {}
impl WindowHandler for MyWindowHandler
{
fn on_draw(&mut self, helper: &mut WindowHelper, graphics: &mut Graphics2D)
{
graphics.clear_screen(Color::from_rgb(0.8, 0.9, 1.0));
graphics.draw_circle((100.0, 100.0), 75.0, Color::BLUE);
// Request that we draw another frame once this one has finished
helper.request_redraw();
}
// If desired, on_mouse_move(), on_key_down(), etc...
}
步骤 4: 最后,通过将你的新WindowHandler
传递给run_loop()
函数来启动事件循环。
window.run_loop(MyWindowHandler{});
就这些!
有关更详细的入门指南,包括完整的WindowHandler
回调列表以及如何渲染文本,请访问docs.rs/speedy2d。
以下为上述示例的完整代码,供您方便参考
use speedy2d::color::Color;
use speedy2d::{Graphics2D, Window};
use speedy2d::window::{WindowHandler, WindowHelper};
fn main() {
let window = Window::new_centered("Title", (640, 480)).unwrap();
window.run_loop(MyWindowHandler{});
}
struct MyWindowHandler {}
impl WindowHandler for MyWindowHandler
{
fn on_draw(&mut self, helper: &mut WindowHelper, graphics: &mut Graphics2D)
{
graphics.clear_screen(Color::from_rgb(0.8, 0.9, 1.0));
graphics.draw_circle((100.0, 100.0), 75.0, Color::BLUE);
helper.request_redraw();
}
}
替代方案:自行管理GL上下文
如果你希望自行处理窗口创建和OpenGL上下文管理,只需在Cargo.toml
文件中禁用Speedy2D的windowing
功能,并按如下方式创建上下文。你将需要指定一个加载函数,以便Speedy2D能够获取OpenGL函数指针。
use speedy2d::GLRenderer;
let mut renderer = unsafe {
GLRenderer::new_for_gl_context((640, 480), |fn_name| {
window_context.get_proc_address(fn_name) as *const _
})
}.unwrap();
然后,使用GLRenderer::draw_frame()
绘制一帧
renderer.draw_frame(|graphics| {
graphics.clear_screen(Color::WHITE);
graphics.draw_circle((100.0, 100.0), 75.0, Color::BLUE);
});
WebGL
要使用Speedy2D与WebGL,你的应用程序必须为WebAssembly编译。Speedy2D可以使用你指定的ID将自身附加到页面上的canvas
。
与Windows/Mac/Linux目标类似,Speedy2D可以是全渲染和事件处理配置,也可以仅用于渲染。
仅用于渲染时,使用以下API
GLRenderer::new_for_web_canvas_by_id()
除了渲染之外,还需要完整的键盘/鼠标等事件处理,使用
WebCanvas::new_for_id()
WebCanvas::new_for_id_with_user_events()
初始化后,通常的WindowHandler
回调和WindowHelper
/Graphics2D
API应该像在其他平台上一样工作。
有关示例,请参阅examples/webgl
目录。首先安装先决条件
cargo install wasm-bindgen-cli just
然后使用以下命令运行构建
just build-example-webgl
许可证
Speedy2D根据Apache许可证,版本2.0授权。有关详细信息,请参阅LICENSE。
贡献
欢迎为Speedy2D提交拉取请求。请在提交之前确保以下检查在本地通过。
注意:自动测试目前仅在Linux上运行。
cargo test
cargo test --no-default-features --lib --examples --tests
cargo clippy
cargo +nightly fmt -- --check
cargo doc
cargo build --target wasm32-unknown-unknown
cargo build --target wasm32-unknown-unknown --no-default-features
可以使用just
自动运行这些命令
just precommit
某些测试需要能够创建无头OpenGL上下文的能力。
依赖关系
~7–13MB
~273K SLoC