reduce the unsafe part to the GPU initialization

This commit is contained in:
numzero 2026-10-26 18:47:58 +03:00
parent 4ab114b733
commit f27dcdbfa4

View File

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