From 820ba9a31ab6e781b4ac356337b4e0df7cd20a6e Mon Sep 17 00:00:00 2001 From: Legokichi Duckscallion Date: Wed, 17 May 2023 00:10:11 +0900 Subject: [PATCH 1/4] bump memmap2 --- Cargo.toml | 2 +- examples/starfield/main.rs | 7 ++++++- src/lib.rs | 11 ++++------- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 287b0b3..8b3e6d6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ path = "src/lib.rs" [dependencies] libc = "0.2" -memmap = "0.7" +memmap2 = "0.6.1" errno = "0.2.7" [[example]] diff --git a/examples/starfield/main.rs b/examples/starfield/main.rs index 875b7e4..6309f1f 100644 --- a/examples/starfield/main.rs +++ b/examples/starfield/main.rs @@ -41,7 +41,12 @@ impl Starfield { } } - fn draw_star(star_data: &Star, framebuffer: &Framebuffer, frame: &mut [u8], color: (u8, u8, u8)) { + fn draw_star( + star_data: &Star, + framebuffer: &Framebuffer, + frame: &mut [u8], + color: (u8, u8, u8), + ) { let w = framebuffer.var_screen_info.xres as usize; let h = framebuffer.var_screen_info.yres as usize; diff --git a/src/lib.rs b/src/lib.rs index 820687e..98c29b2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,7 +2,7 @@ //!Examples can be found [here](https://github.com/Roysten/rust-framebuffer/tree/master/examples). extern crate libc; -extern crate memmap; +extern crate memmap2; use libc::ioctl; @@ -12,7 +12,7 @@ use std::os::unix::io::AsRawFd; use std::path::Path; use errno::errno; -use memmap::{MmapMut, MmapOptions}; +use memmap2::{MmapMut, MmapOptions}; const FBIOGET_VSCREENINFO: libc::c_ulong = 0x4600; const FBIOPUT_VSCREENINFO: libc::c_ulong = 0x4601; @@ -191,7 +191,7 @@ impl Framebuffer { ///Writes a frame to the Framebuffer. pub fn write_frame(&mut self, frame: &[u8]) { - self.frame[..].copy_from_slice(&frame[..]); + self.frame[..].copy_from_slice(frame); } ///Reads a frame from the framebuffer. @@ -238,10 +238,7 @@ impl Framebuffer { } } - pub fn pan_display( - device: &File, - screeninfo: &VarScreeninfo, - ) -> Result { + pub fn pan_display(device: &File, screeninfo: &VarScreeninfo) -> Result { match unsafe { ioctl(device.as_raw_fd(), FBIOPAN_DISPLAY as _, screeninfo) } { -1 => Err(FramebufferError::new( FramebufferErrorKind::IoctlFailed, From 4716ce8667632d479487096f62801fd8ab06b8e2 Mon Sep 17 00:00:00 2001 From: Legokichi Duckscallion Date: Wed, 17 May 2023 00:24:35 +0900 Subject: [PATCH 2/4] bump edition to 2021 --- Cargo.toml | 2 +- examples/mandelbrot/main.rs | 4 +--- examples/rust-logo/main.rs | 2 +- examples/sierpinski/main.rs | 4 +--- examples/starfield/main.rs | 11 ++++------- src/lib.rs | 4 ---- 6 files changed, 8 insertions(+), 19 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 8b3e6d6..6341efb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "framebuffer" version = "0.3.1" authors = ["Roy van der Vegt "] -edition = "2018" +edition = "2021" description = """ Basic framebuffer abstraction. Handles the necessary ioctls and mmaps the framebuffer device. """ diff --git a/examples/mandelbrot/main.rs b/examples/mandelbrot/main.rs index 2de6512..32c57fd 100644 --- a/examples/mandelbrot/main.rs +++ b/examples/mandelbrot/main.rs @@ -1,5 +1,3 @@ -extern crate framebuffer; - use framebuffer::{Framebuffer, KdMode}; //Algorithm copied from: @@ -40,7 +38,7 @@ fn main() { } } - let _ = framebuffer.write_frame(&frame); + framebuffer.write_frame(&frame); std::io::stdin().read_line(&mut String::new()).unwrap(); let _ = Framebuffer::set_kd_mode(KdMode::Text).unwrap(); diff --git a/examples/rust-logo/main.rs b/examples/rust-logo/main.rs index c3ebcea..110c1b5 100644 --- a/examples/rust-logo/main.rs +++ b/examples/rust-logo/main.rs @@ -26,7 +26,7 @@ fn main() { frame[start_index + 2] = px.r; } - let _ = framebuffer.write_frame(&frame); + framebuffer.write_frame(&frame); } //Reenable text mode in current tty diff --git a/examples/sierpinski/main.rs b/examples/sierpinski/main.rs index 91d4e68..11a571e 100644 --- a/examples/sierpinski/main.rs +++ b/examples/sierpinski/main.rs @@ -1,5 +1,3 @@ -extern crate framebuffer; - use framebuffer::{Framebuffer, KdMode}; fn main() { @@ -43,7 +41,7 @@ fn main() { } } - let _ = framebuffer.write_frame(&frame); + framebuffer.write_frame(&frame); let _ = std::io::stdin().read_line(&mut String::new()); let _ = Framebuffer::set_kd_mode(KdMode::Text).unwrap(); } diff --git a/examples/starfield/main.rs b/examples/starfield/main.rs index 6309f1f..ae0726b 100644 --- a/examples/starfield/main.rs +++ b/examples/starfield/main.rs @@ -1,6 +1,3 @@ -extern crate framebuffer; -extern crate rand; - use framebuffer::Framebuffer; use rand::Rng; @@ -27,7 +24,7 @@ impl Starfield { for star in stars.iter_mut() { *star = Star::new_rand(w, h); } - Starfield { stars: stars } + Starfield { stars } } fn tick(&mut self, framebuffer: &Framebuffer, frame: &mut [u8]) { @@ -35,9 +32,9 @@ impl Starfield { let h = framebuffer.var_screen_info.yres as usize; for star in self.stars.iter_mut() { - Starfield::draw_star(&star, framebuffer, frame, (0, 0, 0)); + Starfield::draw_star(star, framebuffer, frame, (0, 0, 0)); star.tick(w, h); - Starfield::draw_star(&star, framebuffer, frame, star.color); + Starfield::draw_star(star, framebuffer, frame, star.color); } } @@ -144,7 +141,7 @@ fn main() { loop { starfield.tick(&framebuffer, &mut frame); - let _ = framebuffer.write_frame(&frame); + framebuffer.write_frame(&frame); } //Reenable text mode in current tty diff --git a/src/lib.rs b/src/lib.rs index 98c29b2..97ef8f2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,9 +1,5 @@ //!Simple linux framebuffer abstraction. //!Examples can be found [here](https://github.com/Roysten/rust-framebuffer/tree/master/examples). - -extern crate libc; -extern crate memmap2; - use libc::ioctl; use std::fmt; From 476aa7ee7371dec410ce08e7fcbdb0f879278563 Mon Sep 17 00:00:00 2001 From: Legokichi Duckscallion Date: Tue, 6 Jun 2023 22:29:01 +0900 Subject: [PATCH 3/4] bump errno --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 6341efb..8851f29 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,7 @@ path = "src/lib.rs" [dependencies] libc = "0.2" memmap2 = "0.6.1" -errno = "0.2.7" +errno = "0.3" [[example]] name = "rust-logo" From c5d9adce93afcec3f9972e5b49029eaa8b536a45 Mon Sep 17 00:00:00 2001 From: Legokichi Duckscallion Date: Tue, 6 Jun 2023 22:45:32 +0900 Subject: [PATCH 4/4] bump image --- Cargo.toml | 2 +- examples/rust-logo/main.rs | 26 +++++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 8851f29..28b3565 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,5 +36,5 @@ name = "sierpinski" path = "examples/sierpinski/main.rs" [dev_dependencies] -bmp = "0.1.4" +image = "0.24" rand = "0.8" diff --git a/examples/rust-logo/main.rs b/examples/rust-logo/main.rs index 110c1b5..29caa21 100644 --- a/examples/rust-logo/main.rs +++ b/examples/rust-logo/main.rs @@ -1,6 +1,3 @@ -extern crate bmp; -extern crate framebuffer; - use framebuffer::{Framebuffer, KdMode}; fn main() { @@ -12,18 +9,25 @@ fn main() { let bytespp = framebuffer.var_screen_info.bits_per_pixel / 8; let mut frame = vec![0u8; (line_length * h) as usize]; - let img = bmp::open("examples/rust-logo/rust-logo.bmp").unwrap(); + + let img = image::io::Reader::open("examples/rust-logo/rust-logo.bmp") + .unwrap() + .decode() + .unwrap(); //Disable text mode in current tty let _ = Framebuffer::set_kd_mode(KdMode::Graphics).unwrap(); - for offset in 0..w - img.get_width() { - for (x, y) in img.coordinates() { - let px = img.get_pixel(x, y); - let start_index = (y * line_length + (offset + x) * bytespp) as usize; - frame[start_index] = px.b; - frame[start_index + 1] = px.g; - frame[start_index + 2] = px.r; + for offset in 0..w - img.width() { + for x in 0..img.width() { + for y in 0..img.height() { + use image::GenericImageView; + let px: image::Rgba = img.get_pixel(x, y); + let start_index = (y * line_length + (offset + x) * bytespp) as usize; + frame[start_index] = px.0[0]; + frame[start_index + 1] = px.0[1]; + frame[start_index + 2] = px.0[2]; + } } framebuffer.write_frame(&frame);