Permalink
Browse files

Split the Renderer

Created a Canvas + TextureCreator
  • Loading branch information...
nrxus authored and Cobrand committed Apr 14, 2017
1 parent d4f133c commit 19c5d126028ab443b0d2ae2935ecaad1e5944653
@@ -14,17 +14,18 @@ fn main() {
let window = video_subsystem.window("SDL2", 640, 480)
.position_centered().build().unwrap();

let mut renderer = window.renderer()
let mut canvas = window.into_canvas()
.accelerated().build().unwrap();
let texture_creator = canvas.texture_creator();

renderer.set_draw_color(sdl2::pixels::Color::RGBA(0,0,0,255));
canvas.set_draw_color(sdl2::pixels::Color::RGBA(0,0,0,255));

let mut timer = sdl_context.timer().unwrap();

let mut event_pump = sdl_context.event_pump().unwrap();

let temp_surface = sdl2::surface::Surface::load_bmp(Path::new("assets/animate.bmp")).unwrap();
let texture = renderer.create_texture_from_surface(&temp_surface).unwrap();
let texture = texture_creator.create_texture_from_surface(&temp_surface).unwrap();

let center = Point::new(320,240);
let mut source_rect = Rect::new(0, 0, 128, 82);
@@ -45,9 +46,9 @@ fn main() {
let ticks = timer.ticks();

source_rect.set_x((128 * ((ticks / 100) % 6) ) as i32);
renderer.clear();
renderer.copy_ex(&texture, Some(source_rect), Some(dest_rect), 10.0, None, true, false).unwrap();
renderer.present();
canvas.clear();
canvas.copy_ex(&texture, Some(source_rect), Some(dest_rect), 10.0, None, true, false).unwrap();
canvas.present();

std::thread::sleep(Duration::from_millis(100));
}
@@ -14,11 +14,11 @@ pub fn main() {
.build()
.unwrap();

let mut renderer = window.renderer().build().unwrap();
let mut canvas = window.into_canvas().build().unwrap();

renderer.set_draw_color(Color::RGB(255, 0, 0));
renderer.clear();
renderer.present();
canvas.set_draw_color(Color::RGB(255, 0, 0));
canvas.clear();
canvas.present();
let mut event_pump = sdl_context.event_pump().unwrap();

'running: loop {
@@ -17,7 +17,6 @@ macro_rules! rect(
);

fn main() {

let sdl_context = sdl2::init().unwrap();
let video_subsys = sdl_context.video().unwrap();
let window = video_subsys.window("rust-sdl2_gfx: draw line & FPSManager", SCREEN_WIDTH, SCREEN_HEIGHT)
@@ -26,11 +25,11 @@ fn main() {
.build()
.unwrap();

let mut renderer = window.renderer().build().unwrap();
let mut canvas = window.into_canvas().build().unwrap();

renderer.set_draw_color(pixels::Color::RGB(0, 0, 0));
renderer.clear();
renderer.present();
canvas.set_draw_color(pixels::Color::RGB(0, 0, 0));
canvas.clear();
canvas.present();

let mut lastx = 0;
let mut lasty = 0;
@@ -50,20 +49,20 @@ fn main() {
} else if keycode == Keycode::Space {
println!("space down");
for i in 0..400 {
renderer.pixel(i as i16, i as i16, 0xFF000FFu32).unwrap();
canvas.pixel(i as i16, i as i16, 0xFF000FFu32).unwrap();
}
renderer.present();
canvas.present();

}
}

Event::MouseButtonDown {x, y, ..} => {
let color = pixels::Color::RGB(x as u8, y as u8, 255);
let _ = renderer.line(lastx, lasty, x as i16, y as i16, color);
let _ = canvas.line(lastx, lasty, x as i16, y as i16, color);
lastx = x as i16;
lasty = y as i16;
println!("mouse btn down at ({},{})", x, y);
renderer.present();
canvas.present();
}

_ => {}
@@ -16,11 +16,12 @@ pub fn run(png: &Path) {
.build()
.unwrap();

let mut renderer = window.renderer().software().build().unwrap();
let texture = renderer.load_texture(png).unwrap();
let mut canvas = window.into_canvas().software().build().unwrap();
let texture_creator = canvas.texture_creator();
let texture = texture_creator.load_texture(png).unwrap();

renderer.copy(&texture, None, None).expect("Render failed");
renderer.present();
canvas.copy(&texture, None, None).expect("Render failed");
canvas.present();

'mainloop: loop {
for event in sdl_context.event_pump().unwrap().poll_iter() {
@@ -15,11 +15,11 @@ pub fn main() {
.build()
.unwrap();

let mut renderer = window.renderer().build().unwrap();
let mut canvas = window.into_canvas().build().unwrap();

renderer.set_draw_color(Color::RGB(255, 0, 0));
renderer.clear();
renderer.present();
canvas.set_draw_color(Color::RGB(255, 0, 0));
canvas.clear();
canvas.present();
let mut event_pump = sdl_context.event_pump().unwrap();

'running: loop {
@@ -30,7 +30,7 @@ pub fn main() {
show_simple_message_box(MESSAGEBOX_ERROR,
"Some title",
"Some information inside the window",
renderer.window());
canvas.window());
match res {
Ok(_) => {}
Err(ShowMessageError::SdlError(string)) => {
@@ -0,0 +1,53 @@
extern crate sdl2;

use sdl2::event::Event;
use sdl2::keyboard::Keycode;
use sdl2::pixels::{Color, PixelFormatEnum};
use sdl2::rect::{Point, Rect};

fn main() {
let sdl_context = sdl2::init().unwrap();
let video_subsystem = sdl_context.video().unwrap();
let window = video_subsystem
.window("rust-sdl2 resource-manager demo", 800, 600)
.position_centered()
.build()
.unwrap();
let mut canvas = window.into_canvas().software().build().unwrap();
let creator = canvas.texture_creator();
let mut texture = creator
.create_texture_target(PixelFormatEnum::RGBA8888, 400, 300)
.unwrap();

let mut angle = 0.0;

'mainloop: loop {
for event in sdl_context.event_pump().unwrap().poll_iter() {
match event {
Event::Quit { .. } => break 'mainloop,
Event::KeyDown { keycode: Some(Keycode::Escape), .. } => break 'mainloop,
_ => {}
}
}
angle = (angle + 0.5) % 360.;
{
let mut target = canvas.with_target(&mut texture).unwrap();
target.clear();
target.set_draw_color(Color::RGBA(255, 0, 0, 255));
target.fill_rect(Rect::new(0, 0, 400, 300)).unwrap();
} // <- drops the `target` so that the `canvas` can be used again
canvas.set_draw_color(Color::RGBA(0, 0, 0, 255));
let dst = Some(Rect::new(0, 0, 400, 300));
canvas.clear();
canvas
.copy_ex(&texture,
None,
dst,
angle,
Some(Point::new(400, 300)),
false,
false)
.unwrap();
canvas.present();
}
}
@@ -15,9 +15,10 @@ pub fn main() {
.build()
.unwrap();

let mut renderer = window.renderer().build().unwrap();
let mut canvas = window.into_canvas().build().unwrap();
let texture_creator = canvas.texture_creator();

let mut texture = renderer.create_texture_streaming(
let mut texture = texture_creator.create_texture_streaming(
PixelFormatEnum::RGB24, 256, 256).unwrap();
// Create a red-green gradient
texture.with_lock(None, |buffer: &mut [u8], pitch: usize| {
@@ -31,11 +32,11 @@ pub fn main() {
}
}).unwrap();

renderer.clear();
renderer.copy(&texture, None, Some(Rect::new(100, 100, 256, 256))).unwrap();
renderer.copy_ex(&texture, None,
canvas.clear();
canvas.copy(&texture, None, Some(Rect::new(100, 100, 256, 256))).unwrap();
canvas.copy_ex(&texture, None,
Some(Rect::new(450, 100, 256, 256)), 30.0, None, false, false).unwrap();
renderer.present();
canvas.present();

let mut event_pump = sdl_context.event_pump().unwrap();

@@ -15,9 +15,10 @@ pub fn main() {
.build()
.unwrap();

let mut renderer = window.renderer().build().unwrap();
let mut canvas = window.into_canvas().build().unwrap();
let texture_creator = canvas.texture_creator();

let mut texture = renderer.create_texture_streaming(
let mut texture = texture_creator.create_texture_streaming(
PixelFormatEnum::IYUV, 256, 256).unwrap();
// Create a U-V gradient
texture.with_lock(None, |buffer: &mut [u8], pitch: usize| {
@@ -48,9 +49,9 @@ pub fn main() {
}
}).unwrap();

renderer.clear();
renderer.copy(&texture, None, Some(Rect::new(100, 100, 256, 256))).unwrap();
renderer.present();
canvas.clear();
canvas.copy(&texture, None, Some(Rect::new(100, 100, 256, 256))).unwrap();
canvas.present();

let mut event_pump = sdl_context.event_pump().unwrap();

Oops, something went wrong.

0 comments on commit 19c5d12

Please sign in to comment.