Update wgpu_glyph to 0.10

This commit is contained in:
Bob Shelline 2020-10-30 17:54:56 -06:00
parent 95b99e2a14
commit eed7406a41
4 changed files with 204 additions and 124 deletions

View file

@ -6,7 +6,7 @@
// long-term unclear which allocations *need* to happen for compilation's sake
// (e.g. recursive structures) versus those which were only added to appease clippy.
//
// Effectively optimizing data struture memory layout isn't a quick fix,
// Effectively optimizing data structure memory layout isn't a quick fix,
// and encouraging shortcuts here creates bad incentives. I would rather temporarily
// re-enable this when working on performance optimizations than have it block PRs.
#![allow(clippy::large_enum_variant)]
@ -41,30 +41,38 @@ fn run_event_loop() -> Result<(), Box<dyn Error>> {
.build(&event_loop)
.unwrap();
let surface = wgpu::Surface::create(&window);
let instance = wgpu::Instance::new(wgpu::BackendBit::all());
let surface = unsafe { instance.create_surface(&window) };
// Initialize GPU
let (device, queue) = futures::executor::block_on(async {
let adapter = wgpu::Adapter::request(
&wgpu::RequestAdapterOptions {
let adapter = instance
.request_adapter(&wgpu::RequestAdapterOptions {
power_preference: wgpu::PowerPreference::HighPerformance,
compatible_surface: Some(&surface),
},
wgpu::BackendBit::all(),
)
.await
.expect("Request adapter");
adapter
.request_device(&wgpu::DeviceDescriptor {
extensions: wgpu::Extensions {
anisotropic_filtering: false,
},
limits: wgpu::Limits { max_bind_groups: 1 },
})
.await
.expect("Request adapter");
adapter
.request_device(
&wgpu::DeviceDescriptor {
features: wgpu::Features::empty(),
limits: wgpu::Limits::default(),
shader_validation: false,
},
None,
)
.await
.expect("Request device")
});
// Create staging belt and a local pool
let mut staging_belt = wgpu::util::StagingBelt::new(1024);
let mut local_pool = futures::executor::LocalPool::new();
let local_spawner = local_pool.spawner();
// Prepare swap chain
let render_format = wgpu::TextureFormat::Bgra8UnormSrgb;
let mut size = window.inner_size();
@ -167,7 +175,10 @@ fn run_event_loop() -> Result<(), Box<dyn Error>> {
});
// Get the next frame
let frame = swap_chain.get_next_texture().expect("Get next frame");
let frame = swap_chain
.get_current_frame()
.expect("Failed to acquire next swap chain texture")
.output;
// Clear frame
{
@ -175,14 +186,7 @@ fn run_event_loop() -> Result<(), Box<dyn Error>> {
color_attachments: &[wgpu::RenderPassColorAttachmentDescriptor {
attachment: &frame.view,
resolve_target: None,
load_op: wgpu::LoadOp::Clear,
store_op: wgpu::StoreOp::Store,
clear_color: wgpu::Color {
r: 0.007,
g: 0.007,
b: 0.007,
a: 1.0,
},
ops: Default::default(),
}],
depth_stencil_attachment: None,
});
@ -208,10 +212,27 @@ fn run_event_loop() -> Result<(), Box<dyn Error>> {
// Draw the text!
glyph_brush
.draw_queued(&device, &mut encoder, &frame.view, size.width, size.height)
.draw_queued(
&device,
&mut staging_belt,
&mut encoder,
&frame.view,
size.width,
size.height,
)
.expect("Draw queued");
queue.submit(&[encoder.finish()]);
staging_belt.finish();
queue.submit(Some(encoder.finish()));
// Recall unused staging buffers
use futures::task::SpawnExt;
local_spawner
.spawn(staging_belt.recall())
.expect("Recall staging belt");
local_pool.run_until_stalled();
}
_ => {
*control_flow = winit::event_loop::ControlFlow::Wait;