Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 6 additions & 8 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ targets = ["x86_64-apple-darwin", "x86_64-unknown-linux-gnu", "x86_64-pc-windows

[features]
default = ["window"]
window = ["glutin", "winit", "raw-window-handle", "wasm-bindgen", "serde", "serde-wasm-bindgen", "web-sys"] # Window module
window = ["glutin", "winit", "wasm-bindgen", "serde", "serde-wasm-bindgen", "web-sys"] # Window module
headless = ["glutin_029"] # Headless rendering
egui-gui = ["egui_glow", "egui", "getrandom"] # Additional GUI features
text = ["swash", "lyon"] # Text mesh generation features
Expand All @@ -29,31 +29,29 @@ cgmath = "0.18"
three-d-asset = "0.9"
thiserror = "2"
open-enum = "0.5"
winit = {version = "0.28", optional = true}
egui = { version = "0.30", optional = true }
egui_glow = { version = "0.30", optional = true }
winit = {version = "0.30", optional = true}
egui = { version = "0.31", optional = true }
egui_glow = { version = "0.31", optional = true }
getrandom = { version = "0.2", features = ["js"], optional = true }
swash = { version = "0.1", optional = true }
lyon = { version = "1", optional = true }

[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
glutin = { version = "0.30", optional = true }
glutin = { version = "0.32", optional = true }
glutin_029 = { package = "glutin", version = "0.29", optional = true }
raw-window-handle = { version = "0.5", optional = true }
image = { version = "0.25", default-features = false, features = ["png"], optional = true }

[target.'cfg(target_arch = "wasm32")'.dependencies]
wasm-bindgen = {version = "0.2", optional = true }
serde = { version = "1", features = ["derive"], optional = true }
serde-wasm-bindgen = { version = "0.6", optional = true }
web-sys = { version = "0.3", features = ['Document', 'HtmlCollection', 'HtmlCanvasElement', 'Window'], optional = true }
instant = "0.1.11"
web-time = "1.1"

[dev-dependencies]
rand = "0.7"
three-d-asset = {version = "0.9", features = ["hdr", "gltf", "obj", "vol", "pcd", "png", "jpeg", "http", "data-url"] }
noise = {version = "0.6", default-features = false}
winit = "0.28"

[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
Expand Down
2 changes: 1 addition & 1 deletion examples/multiwindow/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ crate-type = ["cdylib"]

[dependencies]
three-d = { path = "../../" }
winit = "0.28"
winit = "0.30"
web-sys = "0.3"
wasm-bindgen = "0.2"

Expand Down
58 changes: 29 additions & 29 deletions examples/multiwindow/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ struct Scene {
}

pub fn main() {
let event_loop = winit::event_loop::EventLoop::new();
let event_loop = winit::event_loop::EventLoop::new().unwrap();

// Create a CPU-side mesh consisting of a single colored triangle
let positions = vec![
Expand All @@ -30,16 +30,16 @@ pub fn main() {
let mut windows = HashMap::new();
for i in 0..2 {
#[cfg(not(target_arch = "wasm32"))]
let window_builder = winit::window::WindowBuilder::new()
let window_builder = winit::window::Window::default_attributes()
.with_title("winit window")
.with_min_inner_size(winit::dpi::LogicalSize::new(720, 720))
.with_inner_size(winit::dpi::LogicalSize::new(720, 720))
.with_position(winit::dpi::LogicalPosition::new(300 * i, 100));
#[cfg(target_arch = "wasm32")]
let window_builder = {
use wasm_bindgen::JsCast;
use winit::platform::web::WindowBuilderExtWebSys;
winit::window::WindowBuilder::new()
use winit::platform::web::WindowAttributesExtWebSys;
window::Window::default_attributes()
.with_canvas(Some(
web_sys::window()
.unwrap()
Expand All @@ -54,7 +54,7 @@ pub fn main() {
.with_inner_size(winit::dpi::LogicalSize::new(720, 720))
.with_prevent_default(true)
};
let window = window_builder.build(&event_loop).unwrap();
let window = event_loop.create_window(window_builder).unwrap();
let context = WindowedContext::from_winit_window(
&window,
three_d::SurfaceSettings {
Expand Down Expand Up @@ -89,41 +89,41 @@ pub fn main() {
);
}

event_loop.run(move |event, _, control_flow| match &event {
winit::event::Event::MainEventsCleared => {
_ = event_loop.run(move |event, event_loop| match &event {
winit::event::Event::AboutToWait => {
for (window, _, _, _) in windows.values() {
window.request_redraw();
}
}
winit::event::Event::RedrawRequested(window_id) => {
if let Some((window, context, frame_input_generator, scene)) =
windows.get_mut(window_id)
{
context.make_current().unwrap();
let frame_input = frame_input_generator.generate(context);

scene.camera.set_viewport(frame_input.viewport);
scene.model.animate(frame_input.accumulated_time as f32);
frame_input
.screen()
.clear(ClearState::color_and_depth(0.8, 0.8, 0.8, 1.0, 1.0))
.render(&scene.camera, &scene.model, &[]);

context.swap_buffers().unwrap();
control_flow.set_poll();
window.request_redraw();
}
}
winit::event::Event::WindowEvent { event, window_id } => {
if let Some((_, context, frame_input_generator, _)) = windows.get_mut(window_id) {
frame_input_generator.handle_winit_window_event(event);
match event {
winit::event::WindowEvent::Resized(physical_size) => {
context.resize(*physical_size);
}
winit::event::WindowEvent::ScaleFactorChanged { new_inner_size, .. } => {
context.resize(**new_inner_size);
winit::event::WindowEvent::RedrawRequested => {
if let Some((window, context, frame_input_generator, scene)) =
windows.get_mut(window_id)
{
context.make_current().unwrap();
let frame_input = frame_input_generator.generate(context);

scene.camera.set_viewport(frame_input.viewport);
scene.model.animate(frame_input.accumulated_time as f32);
frame_input
.screen()
.clear(ClearState::color_and_depth(0.8, 0.8, 0.8, 1.0, 1.0))
.render(&scene.camera, &scene.model, &[]);

context.swap_buffers().unwrap();
event_loop.set_control_flow(winit::event_loop::ControlFlow::Poll);
window.request_redraw();
}
}
// winit::event::WindowEvent::ScaleFactorChanged { new_inner_size, .. } => {
// context.resize(**new_inner_size);
// }
winit::event::WindowEvent::CloseRequested => {
if let Some((_, context, _, _)) = windows.get_mut(window_id) {
context.make_current().unwrap();
Expand All @@ -132,7 +132,7 @@ pub fn main() {
windows.remove(window_id);

if windows.is_empty() {
control_flow.set_exit();
event_loop.exit();
}
}
_ => (),
Expand Down
2 changes: 1 addition & 1 deletion examples/winit_window/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ crate-type = ["cdylib"]

[dependencies]
three-d = { path = "../../" }
winit = "0.28"
winit = "0.30"
web-sys = "0.3"
wasm-bindgen = "0.2"

Expand Down
76 changes: 39 additions & 37 deletions examples/winit_window/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
use three_d::{renderer::*, FrameInputGenerator, SurfaceSettings, WindowedContext};

pub fn main() {
let event_loop = winit::event_loop::EventLoop::new();
let event_loop = winit::event_loop::EventLoop::new().unwrap();

#[cfg(not(target_arch = "wasm32"))]
let window_builder = winit::window::WindowBuilder::new()
let window_builder = winit::window::Window::default_attributes()
.with_title("winit window")
.with_min_inner_size(winit::dpi::LogicalSize::new(1280, 720))
.with_maximized(true);
#[cfg(target_arch = "wasm32")]
let window_builder = {
use wasm_bindgen::JsCast;
use winit::platform::web::WindowBuilderExtWebSys;
winit::window::WindowBuilder::new()
use winit::platform::web::WindowAttributesExtWebSys;
window::Window::default_attributes()
.with_canvas(Some(
web_sys::window()
.unwrap()
Expand All @@ -27,7 +27,7 @@ pub fn main() {
.with_inner_size(winit::dpi::LogicalSize::new(1280, 720))
.with_prevent_default(true)
};
let window = window_builder.build(&event_loop).unwrap();
let window = event_loop.create_window(window_builder).unwrap();
let context = WindowedContext::from_winit_window(&window, SurfaceSettings::default()).unwrap();

// Create camera
Expand All @@ -54,40 +54,42 @@ pub fn main() {

// Event loop
let mut frame_input_generator = FrameInputGenerator::from_winit_window(&window);
event_loop.run(move |event, _, control_flow| match event {
winit::event::Event::MainEventsCleared => {
window.request_redraw();
}
winit::event::Event::RedrawRequested(_) => {
let mut frame_input = frame_input_generator.generate(&context);
_ = event_loop.run(
move |event: winit::event::Event<()>, event_loop| match event {
winit::event::Event::AboutToWait => {
window.request_redraw();
}
winit::event::Event::WindowEvent { ref event, .. } => {
frame_input_generator.handle_winit_window_event(event);
match event {
winit::event::WindowEvent::Resized(physical_size) => {
context.resize(*physical_size);
}
winit::event::WindowEvent::RedrawRequested => {
let mut frame_input = frame_input_generator.generate(&context);

control.handle_events(&mut camera, &mut frame_input.events);
camera.set_viewport(frame_input.viewport);
model.animate(frame_input.accumulated_time as f32);
frame_input
.screen()
.clear(ClearState::color_and_depth(0.8, 0.8, 0.8, 1.0, 1.0))
.render(&camera, &model, &[]);
control.handle_events(&mut camera, &mut frame_input.events);
camera.set_viewport(frame_input.viewport);
model.animate(frame_input.accumulated_time as f32);
frame_input
.screen()
.clear(ClearState::color_and_depth(0.8, 0.8, 0.8, 1.0, 1.0))
.render(&camera, &model, &[]);

context.swap_buffers().unwrap();
control_flow.set_poll();
window.request_redraw();
}
winit::event::Event::WindowEvent { ref event, .. } => {
frame_input_generator.handle_winit_window_event(event);
match event {
winit::event::WindowEvent::Resized(physical_size) => {
context.resize(*physical_size);
}
winit::event::WindowEvent::ScaleFactorChanged { new_inner_size, .. } => {
context.resize(**new_inner_size);
}
winit::event::WindowEvent::CloseRequested => {
control_flow.set_exit();
context.swap_buffers().unwrap();
event_loop.set_control_flow(winit::event_loop::ControlFlow::Poll);
window.request_redraw();
}
// winit::event::WindowEvent::ScaleFactorChanged { new_inner_size, .. } => {
// context.resize(**new_inner_size);
// }
winit::event::WindowEvent::CloseRequested => {
event_loop.exit();
}
_ => (),
}
_ => (),
}
}
_ => {}
});
_ => {}
},
);
}
Loading
Loading