Browse Source

First pass of graphics bitmap example

pull/29/head
Ian Chamberlain 3 years ago
parent
commit
793a95073b
No known key found for this signature in database
GPG Key ID: AE5484D09405AA60
  1. BIN
      ctru-rs/examples/assets/ferris.png
  2. BIN
      ctru-rs/examples/assets/ferris.rgb
  3. 61
      ctru-rs/examples/graphics-bitmap.rs

BIN
ctru-rs/examples/assets/ferris.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
ctru-rs/examples/assets/ferris.rgb

Binary file not shown.

61
ctru-rs/examples/graphics-bitmap.rs

@ -0,0 +1,61 @@
use ctru::console::Console;
use ctru::gfx::{Screen as _, Side};
use ctru::services::hid::KeyPad;
use ctru::services::{Apt, Hid};
use ctru::Gfx;
/// Ferris image taken from <https://rustacean.net> and scaled down to 320x240px.
/// To regenerate the data, you will need to install `imagemagick` and run this
/// command from the `examples` directory:
///
/// ```sh
/// convert assets/ferris.png -channel B -separate \
/// assets/ferris.png -channel G -separate \
/// assets/ferris.png -channel R -separate \
/// -channel RGB -combine -rotate 90 \
/// assets/ferris.rgb
/// ```
static IMAGE: &[u8] = include_bytes!("assets/ferris.rgb");
fn main() {
ctru::init();
let gfx = Gfx::default();
let hid = Hid::init().expect("Couldn't obtain HID controller");
let apt = Apt::init().expect("Couldn't obtain APT controller");
let _console = Console::init(gfx.top_screen.borrow_mut());
println!("\x1b[21;16HPress Start to exit.");
let mut bottom_screen = gfx.bottom_screen.borrow_mut();
// We don't need double buffering in this example.
// In this way we can draw our image only once on screen.
bottom_screen.set_double_buffering(false);
// The "Left" side framebuffer is the only valid one for bottom screen
// TODO: make `get_raw_framebuffer` only accept a side for top screen
// Also, we assume the image is the correct size already...
let (frame_buffer, _width, _height) = bottom_screen.get_raw_framebuffer(Side::Left);
// Copy the image into the frame buffer
unsafe {
frame_buffer.copy_from(IMAGE.as_ptr(), IMAGE.len());
}
// Main loop
while apt.main_loop() {
//Scan all the inputs. This should be done once for each frame
hid.scan_input();
if hid.keys_down().contains(KeyPad::KEY_START) {
break;
}
// Flush and swap framebuffers
gfx.flush_buffers();
gfx.swap_buffers();
//Wait for VBlank
gfx.wait_for_vblank();
}
}
Loading…
Cancel
Save