8 个版本
新 0.1.9 | 2024 年 8 月 24 日 |
---|---|
0.1.8 | 2024 年 8 月 23 日 |
146 在 图形 API 中排名
每月 139 次下载
20KB
308 代码行
SDL2 的简单包装器。
这是一个正在开发中的包的早期发布。请谨慎使用。
此包假定您已将 SDL2 安装在您的系统上(例如,在 MacOS 上使用 'brew install sdl2')。如果找不到 SDL2,则不会运行。
主要设计用于提供对 RGB 像素缓冲区的原始访问,并正确显示其内容,具有诸如 Vsync 和帧率限制等定时选项,以及诸如纵横比和整数缩放等缩放选项。
在花费整个周末测试多个可能执行此任务的库之后,我决定制作此包,但这些库要么性能不佳,要么未能以适当的帧速率显示帧。SDL2 是唯一满足所有要求的、但最终证明是最复杂的、高级库,因此将其包装在更简单的东西中可能对许多人有价值,他们只需要一个“帧缓冲区”来写入像素。
主要目标是优先考虑简洁性而不是功能。话虽如此,它将在未来扩展,提供对其他基本 SDL2 功能(如声音)的访问。
警告:一些 SDL2 内部作为公共成员公开,但这种访问是 未测试的。
示例
此示例可以运行,在包根目录的终端中调用 cargo run -p example
。
use mini_sdl::*;
fn main() -> Result<(), String> {
let mut app = mini_sdl::App::new(
"test",
320,
240,
Timing::VsyncLimitFPS(60.0),
Scaling::PreserveAspect,
)?;
app.print_fps_interval = Some(1.0);
while !app.quit_requested {
app.start_frame()?;
// When calling update_pixels, "buffer" receives access
// to the render_target pixels in RGB format.
// _pitch, not used here, is how many bytes per row.
app.update_pixels(
|buffer: &mut [u8], _pitch: usize| {
let mut i = 0;
while i < buffer.len() {
buffer[i] = 255; // Red
buffer[i + 1] = 128; // Green
buffer[i + 2] = 16; // Blue
i += 3;
}
}
)?;
app.present_pixel_buffer()?;
app.finish_frame()?;
}
Ok(())
}
依赖项
~16MB
~345K SLoC