#framebuffer #opengl #image #windowing #graphics

ufb

仅快速在窗口中显示或绘制一个帧缓冲区,别无其他!

2个版本

0.2.1 2021年3月13日
0.2.0 2021年3月4日
0.1.4 2021年3月4日
0.1.2 2021年2月27日

166渲染

每月下载量35次
用于 ez-pixmap

MIT 许可证

195KB
132

ufb

仅快速在窗口中显示或绘制一个帧缓冲区,别无其他!

为什么使用ufb

  • 通过OpenGL进行硬件加速。
  • 快速调试图像或帧缓冲区输出,而不是写入文件。
  • 支持L8、La8、Rgb8和Rgba8 &[u8] 缓冲区。
  • 构建速度快。
  • 不需要vulkan驱动。支持旧版OpenGL。
  • 接口最小化。

使用方法

[dependencies]
ufb = "0.2"
use ufb::{ColorDepth, Window};

const WIDTH: u32 = 768;
const HEIGHT: u32 = 768;

fn main() { 
    let mut win = Window::new(WIDTH, HEIGHT, ColorDepth::Rgb8, "My Framebuffer").unwrap();
    for (iter, pixel) in win.get_frame().chunks_exact_mut(3).enumerate() {
        let x = iter % WIDTH as usize;
        let y = iter / WIDTH as usize;
        let val = x ^ y;
        let hex = format!("{:06x}", val);
        let r = u8::from_str_radix(&hex[0..2], 16).unwrap();
        let g = u8::from_str_radix(&hex[2..4], 16).unwrap();
        let b = u8::from_str_radix(&hex[4..6], 16).unwrap();
        pixel.copy_from_slice(&[r, g, b]);
    }
    win.show();
}

使用image crate

use ufb::{ColorDepth, Window};
use image::GenericImageView;

fn main() {
    let img = image::open("screenshots/image.jpg").unwrap();
    let (w, h) = img.dimensions();
    let mut win = Window::new(w, h, ColorDepth::Rgba8, "image.jpg").unwrap();
    win.get_frame().copy_from_slice(&img.to_rgba8());
    win.show();
}

示例

运行示例

$ cargo run --example pattern
$ cargo run --example gradient
$ cargo run --example noise
$ cargo run --example image
$ cargo run --example fractals

依赖项

~3MB
~68K SLoC