feat(renderer): update new() to accept window handles
Updated the Renderer constructor to accept RawDisplayHandle and RawWindowHandle, and updated the client to pass these handles during resumption. This is a prerequisite for surface creation.
This commit is contained in:
parent
70e08dd883
commit
347f868af1
1
Cargo.lock
generated
1
Cargo.lock
generated
|
|
@ -1054,6 +1054,7 @@ name = "renderer"
|
|||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"ash",
|
||||
"raw-window-handle",
|
||||
"thiserror 2.0.18",
|
||||
"tracing",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use anyhow::{Context, Result};
|
||||
use raw_window_handle::HasDisplayHandle;
|
||||
use raw_window_handle::{HasDisplayHandle, HasWindowHandle};
|
||||
use tracing::info;
|
||||
use winit::application::ApplicationHandler;
|
||||
use winit::event::WindowEvent;
|
||||
|
|
@ -23,10 +23,15 @@ impl ApplicationHandler for App {
|
|||
.expect("Failed to get display handle")
|
||||
.as_raw();
|
||||
|
||||
// Get the window handle for surface creation
|
||||
let window_handle = self.window.as_ref().unwrap().window_handle()
|
||||
.expect("Failed to get window handle")
|
||||
.as_raw();
|
||||
|
||||
let required_extensions = ash_window::enumerate_required_extensions(display_handle)
|
||||
.expect("Failed to enumerate required extensions");
|
||||
|
||||
let renderer = renderer::Renderer::new(required_extensions)
|
||||
let renderer = renderer::Renderer::new(display_handle, window_handle, required_extensions)
|
||||
.expect("Failed to initialize Vulkan renderer");
|
||||
|
||||
self.renderer = Some(renderer);
|
||||
|
|
|
|||
|
|
@ -5,5 +5,6 @@ edition = "2024"
|
|||
|
||||
[dependencies]
|
||||
ash = "0.38.0"
|
||||
raw-window-handle = "0.6.2"
|
||||
thiserror = "2.0.18"
|
||||
tracing = "0.1.44"
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ pub mod error;
|
|||
|
||||
use std::ffi::{CStr, c_char};
|
||||
use ash::{Entry, Instance, ext, vk, Device};
|
||||
use raw_window_handle::{RawDisplayHandle, RawWindowHandle};
|
||||
use tracing::{debug, error, info, warn};
|
||||
|
||||
pub use error::RendererError;
|
||||
|
|
@ -32,8 +33,13 @@ impl Renderer {
|
|||
/// This function loads the Vulkan library, creates an instance, selects a GPU,
|
||||
/// and initializes a logical device with a graphics queue.
|
||||
///
|
||||
/// `display_handle` and `window_handle` are used to create the OS-specific surface.
|
||||
/// `required_extensions` are raw C-strings (pointers) provided by the windowing system.
|
||||
pub fn new(required_extensions: &[*const c_char]) -> Result<Self, RendererError> {
|
||||
pub fn new(
|
||||
display_handle: RawDisplayHandle,
|
||||
window_handle: RawWindowHandle,
|
||||
required_extensions: &[*const c_char],
|
||||
) -> Result<Self, RendererError> {
|
||||
let entry = unsafe { Entry::load() }?;
|
||||
|
||||
// Prepare extensions and layers
|
||||
|
|
|
|||
Loading…
Reference in a new issue