mirror of https://github.com/sotrh/learn-wgpu
Compare commits
12 Commits
2bb2f8373b
...
ce957226d3
Author | SHA1 | Date |
---|---|---|
Benjamin Hansen | ce957226d3 | 1 month ago |
Benjamin Hansen | 09c1024a8f | 1 month ago |
Benjamin Hansen | 3d27fca202 | 1 month ago |
Benjamin Hansen | 5eacaf4e9c | 1 month ago |
Benjamin Hansen | 8bb1b080b4 | 1 month ago |
Benjamin Hansen | 202012b76d | 2 months ago |
Benjamin Hansen | 3e618336bd | 2 months ago |
Benjamin Hansen | 6325590051 | 3 months ago |
Benjamin Hansen | 4daff65c34 | 3 months ago |
Benjamin Hansen | 7c290e7436 | 3 months ago |
Benjamin Hansen | 12f115dfa1 | 3 months ago |
Benjamin Hansen | 3f0caa6904 | 4 months ago |
File diff suppressed because it is too large
Load Diff
@ -1,12 +0,0 @@
|
|||||||
[package]
|
|
||||||
name = "lost-window"
|
|
||||||
version = "0.1.0"
|
|
||||||
edition = "2021"
|
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
anyhow = "1"
|
|
||||||
wgpu = "0.18"
|
|
||||||
winit = "0.28"
|
|
||||||
pollster = "0.3"
|
|
@ -1,127 +0,0 @@
|
|||||||
use std::time::{Duration, Instant};
|
|
||||||
|
|
||||||
use winit::{
|
|
||||||
event::{Event, WindowEvent},
|
|
||||||
event_loop::EventLoop,
|
|
||||||
window::WindowBuilder,
|
|
||||||
};
|
|
||||||
|
|
||||||
async fn run() -> anyhow::Result<()> {
|
|
||||||
let event_loop = EventLoop::new();
|
|
||||||
let mut window = Some(
|
|
||||||
WindowBuilder::new()
|
|
||||||
.with_visible(false)
|
|
||||||
.build(&event_loop)?,
|
|
||||||
);
|
|
||||||
|
|
||||||
let window2 = WindowBuilder::new()
|
|
||||||
.with_visible(false)
|
|
||||||
.build(&event_loop)?;
|
|
||||||
|
|
||||||
let backends = wgpu::Backends::all();
|
|
||||||
let instance = wgpu::Instance::default();
|
|
||||||
let surface = unsafe { instance.create_surface(window.as_ref().unwrap()) }.unwrap();
|
|
||||||
let adapter = instance
|
|
||||||
.enumerate_adapters(backends)
|
|
||||||
.filter(|a| a.is_surface_supported(&surface))
|
|
||||||
.next()
|
|
||||||
.unwrap();
|
|
||||||
let (device, queue) = adapter
|
|
||||||
.request_device(
|
|
||||||
&wgpu::DeviceDescriptor {
|
|
||||||
label: None,
|
|
||||||
features: Default::default(),
|
|
||||||
limits: Default::default(),
|
|
||||||
},
|
|
||||||
None,
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let inner_size = window.as_ref().unwrap().inner_size();
|
|
||||||
let mut config = wgpu::SurfaceConfiguration {
|
|
||||||
width: inner_size.width,
|
|
||||||
height: inner_size.height,
|
|
||||||
format: surface.get_capabilities(&adapter).formats[0],
|
|
||||||
usage: wgpu::TextureUsages::RENDER_ATTACHMENT,
|
|
||||||
present_mode: Default::default(),
|
|
||||||
alpha_mode: wgpu::CompositeAlphaMode::Auto,
|
|
||||||
view_formats: vec![],
|
|
||||||
};
|
|
||||||
surface.configure(&device, &config);
|
|
||||||
|
|
||||||
let start_time = Instant::now();
|
|
||||||
window.as_ref().unwrap().set_visible(true);
|
|
||||||
window2.set_visible(true);
|
|
||||||
event_loop.run(move |ev, _, cf| {
|
|
||||||
match ev {
|
|
||||||
Event::WindowEvent { event, window_id } => {
|
|
||||||
match event {
|
|
||||||
WindowEvent::Resized(size) => {
|
|
||||||
if window.is_some() && window_id == window.as_ref().unwrap().id() {
|
|
||||||
config.width = size.width;
|
|
||||||
config.height = size.height;
|
|
||||||
surface.configure(&device, &config);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
WindowEvent::CloseRequested => {
|
|
||||||
// You'll only really want to close the window while testing
|
|
||||||
cf.set_exit()
|
|
||||||
}
|
|
||||||
_ => (),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Event::RedrawRequested(_) => {
|
|
||||||
let frame = match surface.get_current_texture() {
|
|
||||||
Ok(frame) => frame,
|
|
||||||
Err(e) => {
|
|
||||||
println!("An error occurred: {:?}", e);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let view = frame.texture.create_view(&Default::default());
|
|
||||||
let mut encoder = device.create_command_encoder(&Default::default());
|
|
||||||
drop(encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
|
|
||||||
label: None,
|
|
||||||
color_attachments: &[Some(wgpu::RenderPassColorAttachment {
|
|
||||||
view: &view,
|
|
||||||
resolve_target: None,
|
|
||||||
ops: Default::default(),
|
|
||||||
})],
|
|
||||||
depth_stencil_attachment: None,
|
|
||||||
occlusion_query_set: None,
|
|
||||||
timestamp_writes: None,
|
|
||||||
}));
|
|
||||||
queue.submit([encoder.finish()]);
|
|
||||||
frame.present();
|
|
||||||
}
|
|
||||||
Event::RedrawEventsCleared => {
|
|
||||||
let current_time = Instant::now();
|
|
||||||
let dt = current_time - start_time;
|
|
||||||
// last_time = current_time;
|
|
||||||
|
|
||||||
if let Some(w) = window.as_ref() {
|
|
||||||
w.request_redraw();
|
|
||||||
}
|
|
||||||
window2.request_redraw();
|
|
||||||
|
|
||||||
println!("dt: {:?}", dt);
|
|
||||||
|
|
||||||
if dt > Duration::from_secs(5) {
|
|
||||||
// Exit the loop
|
|
||||||
cf.set_exit();
|
|
||||||
} else if dt > Duration::from_secs(2) {
|
|
||||||
// Dispose of the first window
|
|
||||||
if let Some(window) = window.take() {
|
|
||||||
drop(window);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => (),
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() -> anyhow::Result<()> {
|
|
||||||
pollster::block_on(run())
|
|
||||||
}
|
|
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue