8 个版本

0.1.9 2024 年 8 月 24 日
0.1.8 2024 年 8 月 23 日

146图形 API 中排名

Download history 139/week @ 2024-08-17

每月 139 次下载

MIT 许可证

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