reduce the unsafe part to the GPU initialization

This commit is contained in:
numzero 2026-10-26 18:47:58 +03:00
parent 9742916bd6
commit 46ce52c2bf

View File

@ -250,8 +250,8 @@ pub async fn init_gpu_inner<E: Error + 'static>(
mod ffi { mod ffi {
use std::{num::NonZero, ptr::NonNull}; use std::{num::NonZero, ptr::NonNull};
use crate::init_gpu_inner; use crate::{Gpu, init_gpu_inner};
use glam::{UVec2, uvec2}; use glam::uvec2;
use wgpu::rwh::{RawDisplayHandle, RawWindowHandle, XcbDisplayHandle, XcbWindowHandle}; use wgpu::rwh::{RawDisplayHandle, RawWindowHandle, XcbDisplayHandle, XcbWindowHandle};
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
@ -263,11 +263,10 @@ mod ffi {
pub cam_fovy: f32, pub cam_fovy: f32,
} }
unsafe fn create_viewport( unsafe fn create_gpu(
display: impl Into<RawDisplayHandle>, display: impl Into<RawDisplayHandle>,
window: impl Into<RawWindowHandle>, window: impl Into<RawWindowHandle>,
size: UVec2, ) -> Gpu {
) -> crate::Core {
let target = wgpu::SurfaceTargetUnsafe::RawHandle { let target = wgpu::SurfaceTargetUnsafe::RawHandle {
raw_display_handle: display.into(), raw_display_handle: display.into(),
raw_window_handle: window.into(), raw_window_handle: window.into(),
@ -276,7 +275,7 @@ mod ffi {
instance.create_surface_unsafe(target) instance.create_surface_unsafe(target)
})) }))
.unwrap(); .unwrap();
crate::Core::new(gpu, size) gpu
} }
#[diplomat::opaque_mut] #[diplomat::opaque_mut]
@ -287,9 +286,9 @@ mod ffi {
let display = let display =
XcbDisplayHandle::new(Some(NonNull::new(connection as *mut _).unwrap()), 0); XcbDisplayHandle::new(Some(NonNull::new(connection as *mut _).unwrap()), 0);
let window = XcbWindowHandle::new(NonZero::new(window).unwrap()); let window = XcbWindowHandle::new(NonZero::new(window).unwrap());
Box::new(Self(unsafe { let gpu = unsafe { create_gpu(display, window) };
create_viewport(display, window, uvec2(width, height)) let size = uvec2(width, height);
})) Box::new(Self(crate::Core::new(gpu, size)))
} }
pub fn configure(&mut self, width: u32, height: u32) { pub fn configure(&mut self, width: u32, height: u32) {