pub fn new() -> Result<Runner, RunnerError>Expand description
Create a Runner instance, required for creating one or more windows.
NOTE: When calling this function, the thread will be made the main thread, future calls to this function will panic if called from a different thread.
Examples found in repository?
examples/input.rs (line 6)
5fn main() {
6 let mut runner = est_render::runner::new().expect("Failed to create runner");
7
8 let _window = runner
9 .create_window("Input Example", Point2::new(800, 600))
10 .build()
11 .expect("Failed to create window");
12
13 let window2 = runner
14 .create_window("Second Window", Point2::new(800, 600))
15 .build()
16 .expect("Failed to create second window");
17
18 let input = runner.create_input(None);
19 let mut input2 = runner.create_input(Some(&window2));
20
21 input2.listen_keyboard_event(|key, pressed| {
22 println!("Second window keyboard event: {} - {}", key, pressed);
23 });
24
25 while runner.pump_events(None) {
26 if input.mouse_pressed_once("Left") {
27 println!("Mouse position: {:?}", input.mouse_position());
28 }
29
30 if input2.mouse_pressed_once("Left") {
31 println!("Mouse position in second window: {:?}", input2.mouse_position());
32 }
33 }
34}More examples
examples/software.rs (line 7)
6fn main() {
7 let mut runner = est_render::runner::new().expect("Failed to create runner");
8 let mut window = runner
9 .create_window("Engine Example", Point2::new(800, 600))
10 .build()
11 .expect("Failed to create window");
12
13 let mut sw = est_render::software::new(Some(&mut window))
14 .build()
15 .expect("Failed to create pixel buffer");
16
17 let mut pixels = vec![128u32; (800 * 600) as usize];
18 let mut size_px = Point2::new(800.0, 600.0);
19
20 while runner.pump_events(None) {
21 for event in runner.get_events() {
22 match event {
23 Event::WindowClosed { .. } => {
24 return;
25 }
26 Event::WindowResized { size, .. } => {
27 pixels.resize((size.x * size.y) as usize, 128);
28 size_px = Point2::new(size.x as f32, size.y as f32);
29 }
30 _ => {}
31 }
32 }
33
34 if let Err(e) = sw.write_buffers(&pixels, size_px) {
35 eprintln!("Error writing buffers: {}", e);
36 }
37 }
38}examples/clear_color.rs (line 6)
5fn main() {
6 let mut runner = est_render::runner::new().expect("Failed to create runner");
7
8 let mut window = runner
9 .create_window("Clear Color Example", Point2::new(800, 600))
10 .build()
11 .expect("Failed to create window");
12
13 let mut gpu = est_render::gpu::new(Some(&mut window))
14 .build()
15 .expect("Failed to create GPU");
16
17 while runner.pump_events(None) {
18 for event in runner.get_events() {
19 match event {
20 Event::WindowClosed { .. } => {
21 return;
22 }
23 _ => {}
24 }
25 }
26
27 if let Ok(mut cmd) = gpu.begin_command() {
28 let surface = cmd.get_surface_texture();
29 if surface.is_err() {
30 println!("Failed to get surface texture: {:?}", surface.err());
31 continue;
32 }
33
34 // Or you could use `cmd.begin_renderpass()` directly
35 if let Ok(mut rp) = cmd.renderpass_builder()
36 .add_surface_color_attachment(surface.as_ref().unwrap(), Some(&BlendState::ALPHA_BLEND))
37 .build()
38 {
39 rp.set_clear_color(Color::BLUE);
40 }
41 }
42 }
43}examples/gpu_adapter.rs (line 6)
5fn main() {
6 let mut runner = est_render::runner::new().expect("Failed to create runner");
7 let mut window = runner
8 .create_window("Engine Example", Point2::new(800, 600))
9 .build()
10 .expect("Failed to create window");
11
12 let adapters = est_render::gpu::query_gpu_adapter(Some(&window));
13 if adapters.is_empty() {
14 eprintln!("No GPU adapters found. Exiting.");
15 return;
16 }
17
18 let selected_adapter = adapters
19 .iter()
20 .find(|adapter| adapter.backend_enum == AdapterBackend::Vulkan)
21 .cloned();
22
23 if selected_adapter.is_none() {
24 eprintln!("No suitable GPU adapter found. Exiting.");
25 return;
26 }
27
28 let adapter = selected_adapter.unwrap();
29 let mut gpu = est_render::gpu::new(Some(&mut window))
30 .set_adapter(&adapter)
31 .build()
32 .expect("Failed to create GPU");
33
34 while runner.pump_events(None) {
35 for event in runner.get_events() {
36 match event {
37 Event::WindowClosed { .. } => {
38 return;
39 }
40 _ => {}
41 }
42 }
43
44 if let Ok(mut cmd) = gpu.begin_command() {
45 if let Ok(mut rp) = cmd.begin_renderpass() {
46 rp.set_clear_color(Color::LIGHTBLUE);
47 }
48 }
49 }
50}examples/drawing.rs (line 6)
5fn main() {
6 let mut runner = est_render::runner::new().expect("Failed to create runner");
7
8 let mut window = runner
9 .create_window("Drawing Example", Point2::new(800, 600))
10 .build()
11 .expect("Failed to create window");
12
13 let mut gpu = est_render::gpu::new(Some(&mut window))
14 .build()
15 .expect("Failed to create GPU");
16
17 let mut rotation = 0.0f32;
18 while runner.pump_events(None) {
19 for event in runner.get_events() {
20 match event {
21 Event::WindowClosed { .. } => {
22 return;
23 }
24 _ => {}
25 }
26 }
27
28 rotation += runner.get_frame_time() as f32 * 60.0f32; // Rotate at 60 degrees per second
29 if rotation >= 360.0 {
30 rotation -= 360.0; // Reset rotation after a full circle
31 }
32
33 if let Ok(mut cmd) = gpu.begin_command() {
34 if let Ok(mut gp) = cmd.begin_renderpass() {
35 gp.set_clear_color(Color::BLUE); // Set the clear color to blue
36
37 if let Some(mut drawing) = gp.begin_drawing() {
38 drawing.set_rotation(rotation); // Set rotation to 45 degrees
39 gp.set_blend(0, Some(&BlendState::ALPHA_BLEND));
40 drawing.draw_rect_filled(
41 Vector2::new(100.0, 100.0),
42 Vector2::new(200.0, 200.0),
43 Color::RED,
44 );
45
46 drawing.draw_circle_filled(Vector2::new(400.0, 300.0), 50.0, 25, Color::GREEN);
47
48 gp.set_blend(0, Some(&BlendState::ADDITIVE_BLEND));
49
50 drawing.draw_text(
51 "Hello, World!",
52 Vector2::new(300.0, 500.0),
53 Color::WHITE,
54 );
55 }
56 }
57 }
58 }
59}examples/font.rs (line 6)
5fn main() {
6 let mut runner = est_render::runner::new().expect("Failed to create runner");
7
8 let mut window = runner
9 .create_window("Font Example", Point2::new(800, 600))
10 .build()
11 .expect("Failed to create window");
12
13 let mut gpu = est_render::gpu::new(Some(&mut window))
14 .build()
15 .expect("Failed to create GPU");
16
17 let mut font_manager = est_render::font::new();
18
19 let font = font_manager
20 .load_font("Arial", None, 20.0)
21 .expect("Failed to load font");
22
23 // Generate baked text texture
24 let texture = font
25 .create_baked_text(&mut gpu, "Hello, World!\nThis is a clear color example.", None)
26 .expect("Failed to create baked text");
27
28 while runner.pump_events(None) {
29 for event in runner.get_events() {
30 match event {
31 Event::WindowClosed { .. } => {
32 return;
33 }
34 _ => {}
35 }
36 }
37
38 if let Ok(mut cmd) = gpu.begin_command() {
39 if let Ok(mut gp) = cmd.begin_renderpass() {
40 gp.set_clear_color(Color::BLUE);
41
42 // The best texture blend for font rendering, others may has artifacts like black borders
43 gp.set_blend(0, Some(&BlendState::ADDITIVE_BLEND));
44
45 if let Some(mut drawing) = gp.begin_drawing() {
46 let size: Vector2 = texture.size().into();
47
48 // Baked text rendering
49 drawing.set_texture(Some(&texture));
50 drawing.draw_rect_image(Vector2::new(0.0, 0.0), size, Color::WHITE);
51
52 // Online text rendering
53 drawing.set_font(&font);
54 drawing.draw_text(
55 "Hello, World!\nThis is a clear color example.",
56 Vector2::new(size.x, 0.0),
57 Color::WHITE,
58 );
59 }
60 }
61 }
62 }
63}Additional examples can be found in: