update graphics to wgpu 29.0.0

This commit is contained in:
2026-03-19 08:11:22 -07:00
parent 2135fa1a39
commit 639733902a
8 changed files with 438 additions and 99 deletions

View File

@@ -19,6 +19,12 @@ impl From<ToSurfaceTarget> for wgpu::SurfaceTarget<'static>{
}
}
// select limits based on presence of webgl feature
#[cfg(not(feature="webgl"))]
const LIMITS:wgpu::Limits=wgpu::Limits::defaults();
#[cfg(feature="webgl")]
const LIMITS:wgpu::Limits=wgpu::Limits::downlevel_webgl2_defaults();
#[wasm_bindgen]
pub struct Graphics{
graphics:graphics::Graphics,
@@ -30,18 +36,18 @@ pub struct Graphics{
pub async fn setup_graphics(canvas:web_sys::HtmlCanvasElement)->Result<Graphics,JsError>{
let size=glam::uvec2(canvas.width(),canvas.height());
let instance_desc=wgpu::InstanceDescriptor::from_env_or_default();
let instance=wgpu::util::new_instance_with_webgpu_detection(&instance_desc).await;
let instance_desc=wgpu::InstanceDescriptor::new_without_display_handle_from_env();
let instance=wgpu::util::new_instance_with_webgpu_detection(instance_desc).await;
let surface=setup::step2::create_surface(&instance,ToSurfaceTarget(canvas)).map_err(|e|JsError::new(&e.to_string()))?;
let adapter=instance.request_adapter(&wgpu::RequestAdapterOptions{
power_preference:wgpu::PowerPreference::HighPerformance,
force_fallback_adapter:false,
compatible_surface:Some(&surface),
}).await.map_err(|e|JsError::new(&e.to_string()))?;
let (device,queue)=setup::step4::request_device(&adapter).await.map_err(|e|JsError::new(&e.to_string()))?;
let (device,queue)=setup::step4::request_device(&adapter,LIMITS).await.map_err(|e|JsError::new(&e.to_string()))?;
let surface=setup::step5::configure_surface(&adapter,&device,surface,(size.x,size.y)).map_err(|e|JsError::new(&e.to_string()))?;
Ok(Graphics{
graphics:graphics::Graphics::new(&device,&queue,size,surface.view_format()),
graphics:graphics::Graphics::new(&device,&queue,size,surface.view_format(),LIMITS),
surface,
device,
queue,
@@ -53,7 +59,7 @@ impl Graphics{
pub fn render(&mut self,bot:&CompleteBot,head:&PlaybackHead,time:f64){
let time=time::from_float(time).unwrap();
let (pos,angles)=head.head.get_position_angles(&bot.bot,time);
let frame=self.surface.new_frame(&self.device);
let frame=self.surface.new_frame(&self.device).expect("Error creating new frame");
let mut encoder=self.device.create_command_encoder(&wgpu::CommandEncoderDescriptor{label:None});
self.graphics.encode_commands(&mut encoder,frame.view(),pos,angles);
self.queue.submit([encoder.finish()]);