pub struct Imgui {
pub ctx: Context,
/* private fields */
}
Fields§
§ctx: Context
Implementations§
Source§impl Imgui
impl Imgui
pub fn new(window: &mut Window) -> Self
Sourcepub fn frame(&mut self, window: &mut Window) -> &mut Ui
pub fn frame(&mut self, window: &mut Window) -> &mut Ui
Examples found in repository?
examples/simple2d.rs (line 31)
8fn main() {
9 let mut el = EventLoop::new(600, 600);
10 let mut renderer = Renderer::new();
11
12 /* default projection type is perspective */
13 renderer.camera.set_projection(ProjectionType::Orthographic);
14 renderer.add_light(Light { position: vec3(0.0, 0.0, 1.0), color: Vec3::ONE })
15 .unwrap();
16
17 /* we'll represent our player using a quad */
18 let player_handle = renderer.add_mesh(Quad::new(Vec3::ONE * 0.1, Vec4::ONE).mesh())
19 .unwrap();
20
21 while !el.window.should_close() {
22 el.update();
23
24 /* we can modify the player by indexing into it in the renderer's meshes */
25 let player = &mut renderer.meshes[player_handle];
26 player.color = vec3(0.5, 0.0, el.time.sin());
27 move_player(&el, &mut player.position);
28
29 renderer.camera.update(Vec3::ZERO, &el);
30
31 let frame = el.ui.frame(&mut el.window);
32 frame.text("hello, world! this is imgui");
33
34 unsafe {
35 Clear(COLOR_BUFFER_BIT | DEPTH_BUFFER_BIT);
36 ClearColor(0.1, 0.2, 0.3, 1.0);
37
38 renderer.draw();
39 el.ui.draw();
40 }
41 }
42}
More examples
examples/ik.rs (line 86)
7fn main() {
8 let mut el = EventLoop::new(600, 600);
9 let mut renderer = Renderer::new();
10
11 unsafe {
12 Enable(DEPTH_TEST);
13 }
14
15 /* default projection type is perspective */
16 renderer.camera.set_projection(ProjectionType::Orthographic);
17 renderer.add_light(Light { position: vec3(0.0, 0.0, 3.0), color: Vec3::ONE })
18 .unwrap();
19
20 /* we'll represent our player using a quad */
21 let player_handle = renderer.add_mesh(Quad::new(Vec3::ONE * 0.1, Vec4::ONE).mesh())
22 .unwrap();
23
24 renderer.meshes[player_handle].position = Vec3::Z * 2.0; // so the player stays in front of everything
25
26 let mut segments = vec![];
27 for _ in 0..128 {
28 let new_segment = Segment::new(vec3(0.0, 0.0, 0.0), 0.05, &mut renderer);
29
30 segments.push(new_segment);
31 }
32
33 renderer.meshes[segments[0].handle].hidden = true;
34 renderer.meshes[segments[segments.len()-1].handle].hidden = true;
35
36 renderer.meshes[player_handle].hidden = true;
37
38
39 segments[0].pos = Vec3::new(-2.0, -2.0, 0.0);
40
41 let mut clamped_pos;
42 let mut player_vel;
43 let mut old_pos = Vec3::ZERO;
44
45 while !el.window.should_close() {
46 el.update();
47 renderer.update();
48
49 segments.iter_mut().for_each(|s| {
50 s.update(&mut renderer);
51 });
52
53 let player = &mut renderer.meshes[player_handle];
54 let mp = el.event_handler.mouse_pos / el.event_handler.width * 2.0;
55 let clamped_player_pos = {
56 // clamped_pos = lerp(clamped_pos, player.position, 0.1);
57 clamped_pos = player.position;
58
59 vec3(clamped_pos.x, clamped_pos.y, 0.0)
60 };
61 fabrik(&mut segments, {
62 if el.event_handler.lmb {
63 clamped_player_pos + vec3(mp.x, mp.y, 0.0)
64 } else {
65 clamped_player_pos
66 }
67 }, 0.0, 2);
68
69 let first_segment_position = segments[0].pos;
70 let seg_amm = segments.len() as f32;
71 let distance = first_segment_position.distance(segments[segments.len()-1].pos);
72 let len = segments[0].length;
73 if distance > segments.len() as f32 * segments[0].length + segments[0].length {
74 segments[0].pos += ((clamped_player_pos - first_segment_position) / seg_amm) * len * f32::powf(distance, 2.3);
75 }
76
77 player_vel = player.position - old_pos;
78 old_pos = player.position;
79
80 player.color = vec3(0.5, 0.0, el.time.sin());
81 move_player(&el, &mut player.position);
82
83 renderer.camera.update(lerp(renderer.camera.pos, player.position, 0.125), &el);
84 renderer.camera.mouse_callback(el.event_handler.mouse_pos, &el.window);
85
86 let frame = el.ui.frame(&mut el.window);
87 frame.text("Hello, world! This is imgui.");
88 frame.text(format!("p: {:.1}\nv: {:.3}", player.position, player_vel));
89
90 unsafe {
91 Clear(COLOR_BUFFER_BIT | DEPTH_BUFFER_BIT);
92 ClearColor(0.1, 0.2, 0.3, 1.0);
93
94 renderer.draw();
95 el.ui.draw();
96 }
97 }
98}
pub fn on_mouse_move(&mut self, xpos: f32, ypos: f32)
pub fn on_mouse_click(&mut self, button: MouseButton, action: Action)
pub fn on_mouse_scroll(&mut self, x: f32, y: f32)
Sourcepub fn draw(&mut self)
pub fn draw(&mut self)
Examples found in repository?
examples/simple2d.rs (line 39)
8fn main() {
9 let mut el = EventLoop::new(600, 600);
10 let mut renderer = Renderer::new();
11
12 /* default projection type is perspective */
13 renderer.camera.set_projection(ProjectionType::Orthographic);
14 renderer.add_light(Light { position: vec3(0.0, 0.0, 1.0), color: Vec3::ONE })
15 .unwrap();
16
17 /* we'll represent our player using a quad */
18 let player_handle = renderer.add_mesh(Quad::new(Vec3::ONE * 0.1, Vec4::ONE).mesh())
19 .unwrap();
20
21 while !el.window.should_close() {
22 el.update();
23
24 /* we can modify the player by indexing into it in the renderer's meshes */
25 let player = &mut renderer.meshes[player_handle];
26 player.color = vec3(0.5, 0.0, el.time.sin());
27 move_player(&el, &mut player.position);
28
29 renderer.camera.update(Vec3::ZERO, &el);
30
31 let frame = el.ui.frame(&mut el.window);
32 frame.text("hello, world! this is imgui");
33
34 unsafe {
35 Clear(COLOR_BUFFER_BIT | DEPTH_BUFFER_BIT);
36 ClearColor(0.1, 0.2, 0.3, 1.0);
37
38 renderer.draw();
39 el.ui.draw();
40 }
41 }
42}
More examples
examples/ik.rs (line 95)
7fn main() {
8 let mut el = EventLoop::new(600, 600);
9 let mut renderer = Renderer::new();
10
11 unsafe {
12 Enable(DEPTH_TEST);
13 }
14
15 /* default projection type is perspective */
16 renderer.camera.set_projection(ProjectionType::Orthographic);
17 renderer.add_light(Light { position: vec3(0.0, 0.0, 3.0), color: Vec3::ONE })
18 .unwrap();
19
20 /* we'll represent our player using a quad */
21 let player_handle = renderer.add_mesh(Quad::new(Vec3::ONE * 0.1, Vec4::ONE).mesh())
22 .unwrap();
23
24 renderer.meshes[player_handle].position = Vec3::Z * 2.0; // so the player stays in front of everything
25
26 let mut segments = vec![];
27 for _ in 0..128 {
28 let new_segment = Segment::new(vec3(0.0, 0.0, 0.0), 0.05, &mut renderer);
29
30 segments.push(new_segment);
31 }
32
33 renderer.meshes[segments[0].handle].hidden = true;
34 renderer.meshes[segments[segments.len()-1].handle].hidden = true;
35
36 renderer.meshes[player_handle].hidden = true;
37
38
39 segments[0].pos = Vec3::new(-2.0, -2.0, 0.0);
40
41 let mut clamped_pos;
42 let mut player_vel;
43 let mut old_pos = Vec3::ZERO;
44
45 while !el.window.should_close() {
46 el.update();
47 renderer.update();
48
49 segments.iter_mut().for_each(|s| {
50 s.update(&mut renderer);
51 });
52
53 let player = &mut renderer.meshes[player_handle];
54 let mp = el.event_handler.mouse_pos / el.event_handler.width * 2.0;
55 let clamped_player_pos = {
56 // clamped_pos = lerp(clamped_pos, player.position, 0.1);
57 clamped_pos = player.position;
58
59 vec3(clamped_pos.x, clamped_pos.y, 0.0)
60 };
61 fabrik(&mut segments, {
62 if el.event_handler.lmb {
63 clamped_player_pos + vec3(mp.x, mp.y, 0.0)
64 } else {
65 clamped_player_pos
66 }
67 }, 0.0, 2);
68
69 let first_segment_position = segments[0].pos;
70 let seg_amm = segments.len() as f32;
71 let distance = first_segment_position.distance(segments[segments.len()-1].pos);
72 let len = segments[0].length;
73 if distance > segments.len() as f32 * segments[0].length + segments[0].length {
74 segments[0].pos += ((clamped_player_pos - first_segment_position) / seg_amm) * len * f32::powf(distance, 2.3);
75 }
76
77 player_vel = player.position - old_pos;
78 old_pos = player.position;
79
80 player.color = vec3(0.5, 0.0, el.time.sin());
81 move_player(&el, &mut player.position);
82
83 renderer.camera.update(lerp(renderer.camera.pos, player.position, 0.125), &el);
84 renderer.camera.mouse_callback(el.event_handler.mouse_pos, &el.window);
85
86 let frame = el.ui.frame(&mut el.window);
87 frame.text("Hello, world! This is imgui.");
88 frame.text(format!("p: {:.1}\nv: {:.3}", player.position, player_vel));
89
90 unsafe {
91 Clear(COLOR_BUFFER_BIT | DEPTH_BUFFER_BIT);
92 ClearColor(0.1, 0.2, 0.3, 1.0);
93
94 renderer.draw();
95 el.ui.draw();
96 }
97 }
98}
Auto Trait Implementations§
impl !Freeze for Imgui
impl !RefUnwindSafe for Imgui
impl !Send for Imgui
impl !Sync for Imgui
impl Unpin for Imgui
impl !UnwindSafe for Imgui
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more