synvael/crates/renderer/src/lib.rs
Serkyo 83dde5a794 feat(renderer): enable vulkan validation layers in debug builds
Configured InstanceCreateInfo to request the VK_LAYER_KHRONOS_validation layer and the VK_EXT_debug_utils extension when compiling in debug mode. This lays the foundation for wiring Vulkan debug callbacks to tracing.
2026-04-30 11:33:07 +02:00

43 lines
1.2 KiB
Rust

pub mod error;
use std::ffi::c_char;
use ash::{Entry, Instance, vk};
pub use error::RendererError;
pub struct Renderer {
_entry: Entry,
instance: Instance,
}
impl Renderer {
/// Initializes the Vulkan renderer.
/// `required_extensions` are raw C-strings (pointers) provided by the windowing system.
pub fn new(required_extensions: &[*const c_char]) -> Result<Self, RendererError> {
let entry = unsafe { Entry::load() }?;
let mut extensions: Vec<*const c_char> = required_extensions.to_vec();
let mut layers: Vec<*const c_char> = Vec::new();
#[cfg(debug_assertions)]
{
extensions.push(ash::ext::debug_utils::NAME.as_ptr());
layers.push(c"VK_LAYER_KHRONOS_validation".as_ptr());
}
let app_info = vk::ApplicationInfo::default()
.api_version(vk::API_VERSION_1_3);
let create_info = vk::InstanceCreateInfo::default()
.application_info(&app_info)
.enabled_extension_names(&extensions)
.enabled_layer_names(&layers);
let instance = unsafe { entry.create_instance(&create_info, None)? };
Ok(Self {
_entry: entry,
instance,
})
}
}