From 784e99b31c4ae3ab0f97ec26045511d00683d66b Mon Sep 17 00:00:00 2001 From: numzero Date: Mon, 26 Oct 2026 18:55:26 +0300 Subject: [PATCH] move the GPU initialization out of the bridge --- src/lib.rs | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 3ee358a..86789df 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,7 @@ use std::error::Error; use glam::{Mat4, UVec2, Vec3, Vec4, vec3, vec4}; +use wgpu::rwh::{RawDisplayHandle, RawWindowHandle}; pub use crate::ffi::RedrawArgs; @@ -246,27 +247,11 @@ pub async fn init_gpu_inner( }) } -#[diplomat::bridge] -mod ffi { - use std::{num::NonZero, ptr::NonNull}; - - use crate::{Gpu, init_gpu_inner}; - use glam::uvec2; - use wgpu::rwh::{RawDisplayHandle, RawWindowHandle, XcbDisplayHandle, XcbWindowHandle}; - - #[derive(Debug, Clone, Copy)] - #[repr(C)] - pub struct RedrawArgs { - pub cam_yaw: f32, - pub cam_pitch: f32, - pub cam_distance: f32, - pub cam_fovy: f32, - } - - unsafe fn create_gpu( +impl Gpu { + unsafe fn new_raw( display: impl Into, window: impl Into, - ) -> Gpu { + ) -> Self { let target = wgpu::SurfaceTargetUnsafe::RawHandle { raw_display_handle: display.into(), raw_window_handle: window.into(), @@ -277,6 +262,23 @@ mod ffi { .unwrap(); gpu } +} + +#[diplomat::bridge] +mod ffi { + use std::{num::NonZero, ptr::NonNull}; + + use glam::uvec2; + use wgpu::rwh::{XcbDisplayHandle, XcbWindowHandle}; + + #[derive(Debug, Clone, Copy)] + #[repr(C)] + pub struct RedrawArgs { + pub cam_yaw: f32, + pub cam_pitch: f32, + pub cam_distance: f32, + pub cam_fovy: f32, + } #[diplomat::opaque_mut] pub struct Core(crate::Core); @@ -286,7 +288,7 @@ mod ffi { let display = XcbDisplayHandle::new(Some(NonNull::new(connection as *mut _).unwrap()), 0); let window = XcbWindowHandle::new(NonZero::new(window).unwrap()); - let gpu = unsafe { create_gpu(display, window) }; + let gpu = unsafe { crate::Gpu::new_raw(display, window) }; let size = uvec2(width, height); Box::new(Self(crate::Core::new(gpu, size))) }