From 8c53667572a81dffd5639486a80b0c2b0ebd9250 Mon Sep 17 00:00:00 2001 From: kyren Date: Tue, 21 May 2019 17:41:26 -0400 Subject: [PATCH] Update for new wgpu PR, keep API slightly closer to vanilla --- examples/framework.rs | 22 +++++++++------------- examples/hello-triangle/main.rs | 23 ++++++++++------------- src/lib.rs | 33 ++++++++++++++++----------------- 3 files changed, 35 insertions(+), 43 deletions(-) diff --git a/examples/framework.rs b/examples/framework.rs index 277dbc4e6f..67534c6007 100644 --- a/examples/framework.rs +++ b/examples/framework.rs @@ -54,7 +54,7 @@ pub fn run(title: &str) { info!("Initializing the window..."); #[cfg(not(feature = "gl"))] - let (_instance, _window, hidpi_factor, size, surface, adapter) = { + let (_window, instance, hidpi_factor, size, surface) = { use wgpu::winit::Window; let instance = wgpu::Instance::new(); @@ -69,15 +69,11 @@ pub fn run(title: &str) { let surface = instance.create_surface(&window); - let adapter = instance.get_adapter(&wgpu::AdapterDescriptor { - power_preference: wgpu::PowerPreference::LowPower, - }); - - (instance, window, hidpi_factor, size, surface, adapter) + (window, instance, hidpi_factor, size, surface) }; #[cfg(feature = "gl")] - let (hidpi_factor, size, surface, adapter) = { + let (instance, hidpi_factor, size, surface) = { let wb = wgpu::winit::WindowBuilder::new(); let cb = wgpu::glutin::ContextBuilder::new().with_vsync(true); let context = wgpu::glutin::WindowedContext::new_windowed(wb, cb, &events_loop).unwrap(); @@ -90,15 +86,15 @@ pub fn run(title: &str) { .unwrap() .to_physical(hidpi_factor); - let surface = wgpu::Surface::create(context); + let instance = wgpu::Instance::new(context); + let surface = instance.get_surface(); - let adapter = surface.get_adapter(&wgpu::AdapterDescriptor { - power_preference: wgpu::PowerPreference::LowPower, - }); - - (hidpi_factor, size, surface, adapter) + (instance, hidpi_factor, size, surface) }; + let adapter = instance.get_adapter(&wgpu::AdapterDescriptor { + power_preference: wgpu::PowerPreference::LowPower, + }); let mut device = adapter.request_device(&wgpu::DeviceDescriptor { extensions: wgpu::Extensions { diff --git a/examples/hello-triangle/main.rs b/examples/hello-triangle/main.rs index 43ff42e374..2892d36700 100644 --- a/examples/hello-triangle/main.rs +++ b/examples/hello-triangle/main.rs @@ -13,7 +13,7 @@ fn main() { let mut events_loop = EventsLoop::new(); #[cfg(not(feature = "gl"))] - let (_instance, _window, size, surface, adapter) = { + let (_window, instance, size, surface) = { use wgpu::winit::Window; let instance = wgpu::Instance::new(); @@ -26,15 +26,11 @@ fn main() { let surface = instance.create_surface(&window); - let adapter = instance.get_adapter(&wgpu::AdapterDescriptor { - power_preference: wgpu::PowerPreference::LowPower, - }); - - (instance, window, size, surface, adapter) + (window, instance, size, surface) }; #[cfg(feature = "gl")] - let (size, surface, adapter) = { + let (instance, size, surface) = { let wb = wgpu::winit::WindowBuilder::new(); let cb = wgpu::glutin::ContextBuilder::new().with_vsync(true); let context = wgpu::glutin::WindowedContext::new_windowed(wb, cb, &events_loop).unwrap(); @@ -45,15 +41,16 @@ fn main() { .unwrap() .to_physical(context.window().get_hidpi_factor()); - let surface = wgpu::Surface::create(context); + let instance = wgpu::Instance::new(context); + let surface = instance.get_surface(); - let adapter = surface.get_adapter(&wgpu::AdapterDescriptor { - power_preference: wgpu::PowerPreference::LowPower, - }); - - (size, surface, adapter) + (instance, size, surface) }; + let adapter = instance.get_adapter(&wgpu::AdapterDescriptor { + power_preference: wgpu::PowerPreference::LowPower, + }); + let mut device = adapter.request_device(&wgpu::DeviceDescriptor { extensions: wgpu::Extensions { anisotropic_filtering: false, diff --git a/src/lib.rs b/src/lib.rs index 1e33803801..1e8d926c7d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -75,7 +75,6 @@ struct Temp { /// /// An `Instance` represents the entire context of a running `wgpu` instance. The `Instance` /// allows the querying of [`Adapter`] objects and the creation of [`Surface`] objects. -#[cfg(not(feature = "gl"))] pub struct Instance { id: wgn::InstanceId, } @@ -457,9 +456,9 @@ where } } -#[cfg(not(feature = "gl"))] impl Instance { /// Create a new `Instance` object. + #[cfg(not(feature = "gl"))] pub fn new() -> Self { Instance { id: wgn::wgpu_create_instance(), @@ -475,6 +474,13 @@ impl Instance { /// /// Panics if there are no available adapters. This will occur if none of the graphics backends /// are enabled. + #[cfg(feature = "gl")] + pub fn new(windowed_context: wgn::glutin::WindowedContext) -> Self { + Instance { + id: wgn::wgpu_create_gl_instance(windowed_context) + } + } + pub fn get_adapter(&self, desc: &AdapterDescriptor) -> Adapter { Adapter { id: wgn::wgpu_instance_get_adapter(self.id, desc), @@ -482,12 +488,20 @@ impl Instance { } /// Creates a surface from a window. + #[cfg(not(feature = "gl"))] pub fn create_surface(&self, window: &winit::Window) -> Surface { Surface { id: wgn::wgpu_instance_create_surface_from_winit(self.id, window), } } + #[cfg(feature = "gl")] + pub fn get_surface(&self) -> Surface { + Surface { + id: wgn::wgpu_instance_get_gl_surface(self.id), + } + } + #[cfg(feature = "metal")] pub fn create_surface_with_metal_layer(&self, window: *mut std::ffi::c_void) -> Surface { Surface { @@ -496,21 +510,6 @@ impl Instance { } } -#[cfg(feature = "gl")] -impl Surface { - pub fn create(windowed_context: wgn::glutin::WindowedContext) -> Surface { - Surface { - id: wgn::wgpu_gl_create_surface(windowed_context) - } - } - - pub fn get_adapter(&self, desc: &AdapterDescriptor) -> Adapter { - Adapter { - id: wgn::wgpu_gl_surface_get_adapter(self.id, desc), - } - } -} - impl Adapter { /// Requests a connection to a physical device, creating a logical device. ///