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/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.pool_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}More examples
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.pool_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.pool_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 while runner.pool_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 if let Ok(mut gp) = cmd.begin_renderpass() {
29 gp.set_clear_color(Color::BLUE); // Set the clear color to blue
30
31 gp.set_blend(0, Some(&BlendState::ALPHA_BLEND));
32 if let Some(mut drawing) = gp.begin_drawing() {
33 drawing.draw_rect_filled(
34 Vector2::new(100.0, 100.0),
35 Vector2::new(200.0, 200.0),
36 Color::RED,
37 );
38
39 drawing.draw_circle_filled(Vector2::new(400.0, 300.0), 50.0, 25, Color::GREEN);
40 }
41
42 gp.set_blend(0, Some(&BlendState::ADDITIVE_BLEND));
43 if let Some(mut drawing) = gp.begin_drawing() {
44 drawing.draw_text(
45 "Hello, World!",
46 Vector2::new(300.0, 500.0),
47 Color::WHITE,
48 );
49 }
50 }
51 }
52 }
53}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.")
26 .expect("Failed to create baked text");
27
28 while runner.pool_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}examples/texture_atlas.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 let texture_atlas = gpu
18 .create_texture_atlas()
19 .add_texture_file(
20 "example_texture",
21 "./examples/resources/test1.png",
22 )
23 .add_texture_file(
24 "example_texture2",
25 "./examples/resources/test2.png",
26 )
27 .build()
28 .expect("Failed to create texture atlas");
29
30 while runner.pool_events(None) {
31 for event in runner.get_events() {
32 match event {
33 Event::WindowClosed { .. } => {
34 return;
35 }
36 _ => {}
37 }
38 }
39
40 if let Ok(mut cmd) = gpu.begin_command() {
41 if let Ok(mut gp) = cmd.begin_renderpass() {
42 gp.set_clear_color(Color::BLUEVIOLET);
43 gp.set_blend(0, Some(&BlendState::NONE));
44
45 if let Some(mut drawing) = gp.begin_drawing() {
46 drawing.set_texture_atlas(Some((&texture_atlas, "example_texture")));
47 drawing.draw_rect_image(
48 Vector2::new(100.0, 100.0),
49 Vector2::new(200.0, 200.0),
50 Color::WHITE,
51 );
52 drawing.set_texture_atlas(Some((&texture_atlas, "example_texture2")));
53 drawing.draw_rect_image(
54 Vector2::new(350.0, 100.0),
55 Vector2::new(200.0, 200.0),
56 Color::WHITE,
57 );
58 drawing.draw_circle_image(Vector2::new(600.0, 200.0), 100.0, 20, Color::WHITE);
59 }
60 }
61 }
62 }
63}Additional examples can be found in: