Merge branch 'master' into beacon
This commit is contained in:
commit
8bd5de72ea
371 changed files with 33138 additions and 12950 deletions
|
|
@ -5,16 +5,17 @@ use controls::Controls;
|
|||
use scene::Scene;
|
||||
|
||||
use iced_wgpu::graphics::Viewport;
|
||||
use iced_wgpu::{wgpu, Engine, Renderer};
|
||||
use iced_wgpu::{Engine, Renderer, wgpu};
|
||||
use iced_winit::Clipboard;
|
||||
use iced_winit::conversion;
|
||||
use iced_winit::core::mouse;
|
||||
use iced_winit::core::renderer;
|
||||
use iced_winit::core::time::Instant;
|
||||
use iced_winit::core::window;
|
||||
use iced_winit::core::{Color, Font, Pixels, Size, Theme};
|
||||
use iced_winit::core::{Event, Font, Pixels, Size, Theme};
|
||||
use iced_winit::futures;
|
||||
use iced_winit::runtime::program;
|
||||
use iced_winit::runtime::user_interface::{self, UserInterface};
|
||||
use iced_winit::winit;
|
||||
use iced_winit::Clipboard;
|
||||
|
||||
use winit::{
|
||||
event::WindowEvent,
|
||||
|
|
@ -42,8 +43,10 @@ pub fn main() -> Result<(), winit::error::EventLoopError> {
|
|||
engine: Engine,
|
||||
renderer: Renderer,
|
||||
scene: Scene,
|
||||
state: program::State<Controls>,
|
||||
cursor_position: Option<winit::dpi::PhysicalPosition<f64>>,
|
||||
controls: Controls,
|
||||
events: Vec<Event>,
|
||||
cursor: mouse::Cursor,
|
||||
cache: user_interface::Cache,
|
||||
clipboard: Clipboard,
|
||||
viewport: Viewport,
|
||||
modifiers: ModifiersState,
|
||||
|
|
@ -67,7 +70,7 @@ pub fn main() -> Result<(), winit::error::EventLoopError> {
|
|||
Size::new(physical_size.width, physical_size.height),
|
||||
window.scale_factor(),
|
||||
);
|
||||
let clipboard = Clipboard::connect(&window);
|
||||
let clipboard = Clipboard::connect(window.clone());
|
||||
|
||||
let backend =
|
||||
wgpu::util::backend_bits_from_env().unwrap_or_default();
|
||||
|
|
@ -101,6 +104,8 @@ pub fn main() -> Result<(), winit::error::EventLoopError> {
|
|||
required_features: adapter_features
|
||||
& wgpu::Features::default(),
|
||||
required_limits: wgpu::Limits::default(),
|
||||
memory_hints:
|
||||
wgpu::MemoryHints::MemoryUsage,
|
||||
},
|
||||
None,
|
||||
)
|
||||
|
|
@ -144,19 +149,13 @@ pub fn main() -> Result<(), winit::error::EventLoopError> {
|
|||
// Initialize iced
|
||||
let engine =
|
||||
Engine::new(&adapter, &device, &queue, format, None);
|
||||
let mut renderer = Renderer::new(
|
||||
let renderer = Renderer::new(
|
||||
&device,
|
||||
&engine,
|
||||
Font::default(),
|
||||
Pixels::from(16),
|
||||
);
|
||||
|
||||
let state = program::State::new(
|
||||
controls,
|
||||
viewport.logical_size(),
|
||||
&mut renderer,
|
||||
);
|
||||
|
||||
// You should change this if you want to render continuously
|
||||
event_loop.set_control_flow(ControlFlow::Wait);
|
||||
|
||||
|
|
@ -169,9 +168,11 @@ pub fn main() -> Result<(), winit::error::EventLoopError> {
|
|||
engine,
|
||||
renderer,
|
||||
scene,
|
||||
state,
|
||||
cursor_position: None,
|
||||
controls,
|
||||
events: Vec::new(),
|
||||
cursor: mouse::Cursor::Unavailable,
|
||||
modifiers: ModifiersState::default(),
|
||||
cache: user_interface::Cache::new(),
|
||||
clipboard,
|
||||
viewport,
|
||||
resized: false,
|
||||
|
|
@ -194,11 +195,13 @@ pub fn main() -> Result<(), winit::error::EventLoopError> {
|
|||
engine,
|
||||
renderer,
|
||||
scene,
|
||||
state,
|
||||
controls,
|
||||
events,
|
||||
viewport,
|
||||
cursor_position,
|
||||
cursor,
|
||||
modifiers,
|
||||
clipboard,
|
||||
cache,
|
||||
resized,
|
||||
} = self
|
||||
else {
|
||||
|
|
@ -238,8 +241,6 @@ pub fn main() -> Result<(), winit::error::EventLoopError> {
|
|||
&wgpu::CommandEncoderDescriptor { label: None },
|
||||
);
|
||||
|
||||
let program = state.program();
|
||||
|
||||
let view = frame.texture.create_view(
|
||||
&wgpu::TextureViewDescriptor::default(),
|
||||
);
|
||||
|
|
@ -249,7 +250,7 @@ pub fn main() -> Result<(), winit::error::EventLoopError> {
|
|||
let mut render_pass = Scene::clear(
|
||||
&view,
|
||||
&mut encoder,
|
||||
program.background_color(),
|
||||
controls.background_color(),
|
||||
);
|
||||
|
||||
// Draw the scene
|
||||
|
|
@ -257,6 +258,33 @@ pub fn main() -> Result<(), winit::error::EventLoopError> {
|
|||
}
|
||||
|
||||
// And then iced on top
|
||||
let mut interface = UserInterface::build(
|
||||
controls.view(),
|
||||
viewport.logical_size(),
|
||||
std::mem::take(cache),
|
||||
renderer,
|
||||
);
|
||||
|
||||
let _ = interface.update(
|
||||
&[Event::Window(
|
||||
window::Event::RedrawRequested(
|
||||
Instant::now(),
|
||||
),
|
||||
)],
|
||||
*cursor,
|
||||
renderer,
|
||||
clipboard,
|
||||
&mut Vec::new(),
|
||||
);
|
||||
|
||||
let mouse_interaction = interface.draw(
|
||||
renderer,
|
||||
&Theme::Dark,
|
||||
&renderer::Style::default(),
|
||||
*cursor,
|
||||
);
|
||||
*cache = interface.into_cache();
|
||||
|
||||
renderer.present(
|
||||
engine,
|
||||
device,
|
||||
|
|
@ -273,17 +301,15 @@ pub fn main() -> Result<(), winit::error::EventLoopError> {
|
|||
frame.present();
|
||||
|
||||
// Update the mouse cursor
|
||||
window.set_cursor(
|
||||
iced_winit::conversion::mouse_interaction(
|
||||
state.mouse_interaction(),
|
||||
),
|
||||
);
|
||||
window.set_cursor(conversion::mouse_interaction(
|
||||
mouse_interaction,
|
||||
));
|
||||
}
|
||||
Err(error) => match error {
|
||||
wgpu::SurfaceError::OutOfMemory => {
|
||||
panic!(
|
||||
"Swapchain error: {error}. \
|
||||
Rendering cannot continue."
|
||||
Rendering cannot continue."
|
||||
)
|
||||
}
|
||||
_ => {
|
||||
|
|
@ -294,7 +320,11 @@ pub fn main() -> Result<(), winit::error::EventLoopError> {
|
|||
}
|
||||
}
|
||||
WindowEvent::CursorMoved { position, .. } => {
|
||||
*cursor_position = Some(position);
|
||||
*cursor =
|
||||
mouse::Cursor::Available(conversion::cursor_position(
|
||||
position,
|
||||
viewport.scale_factor(),
|
||||
));
|
||||
}
|
||||
WindowEvent::ModifiersChanged(new_modifiers) => {
|
||||
*modifiers = new_modifiers.state();
|
||||
|
|
@ -309,37 +339,42 @@ pub fn main() -> Result<(), winit::error::EventLoopError> {
|
|||
}
|
||||
|
||||
// Map window event to iced event
|
||||
if let Some(event) = iced_winit::conversion::window_event(
|
||||
window::Id::MAIN,
|
||||
if let Some(event) = conversion::window_event(
|
||||
event,
|
||||
window.scale_factor(),
|
||||
*modifiers,
|
||||
) {
|
||||
state.queue_event(event);
|
||||
events.push(event);
|
||||
}
|
||||
|
||||
// If there are events pending
|
||||
if !state.is_queue_empty() {
|
||||
// We update iced
|
||||
let _ = state.update(
|
||||
if !events.is_empty() {
|
||||
// We process them
|
||||
let mut interface = UserInterface::build(
|
||||
controls.view(),
|
||||
viewport.logical_size(),
|
||||
cursor_position
|
||||
.map(|p| {
|
||||
conversion::cursor_position(
|
||||
p,
|
||||
viewport.scale_factor(),
|
||||
)
|
||||
})
|
||||
.map(mouse::Cursor::Available)
|
||||
.unwrap_or(mouse::Cursor::Unavailable),
|
||||
std::mem::take(cache),
|
||||
renderer,
|
||||
&Theme::Dark,
|
||||
&renderer::Style {
|
||||
text_color: Color::WHITE,
|
||||
},
|
||||
clipboard,
|
||||
);
|
||||
|
||||
let mut messages = Vec::new();
|
||||
|
||||
let _ = interface.update(
|
||||
events,
|
||||
*cursor,
|
||||
renderer,
|
||||
clipboard,
|
||||
&mut messages,
|
||||
);
|
||||
|
||||
events.clear();
|
||||
*cache = interface.into_cache();
|
||||
|
||||
// update our UI with any messages
|
||||
for message in messages {
|
||||
controls.update(message);
|
||||
}
|
||||
|
||||
// and request a redraw
|
||||
window.request_redraw();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue