vulkanalia-bootstrap 0.1.8

A utility library that jump starts initialization of Vulkan via Vulkanalia
Documentation
use std::borrow::Cow;
use std::ffi;
use vulkanalia::vk;
use vulkanalia::vk::DebugUtilsMessageSeverityFlagsEXT;

pub unsafe extern "system" fn vulkan_tracing_callback(
    message_severity: DebugUtilsMessageSeverityFlagsEXT,
    _message_type: vk::DebugUtilsMessageTypeFlagsEXT,
    p_callback_data: *const vk::DebugUtilsMessengerCallbackDataEXT,
    _user_data: *mut std::os::raw::c_void,
) -> vk::Bool32 {
    unsafe {
        let callback_data = *p_callback_data;
        let message_id_number = callback_data.message_id_number;

        let message_id_name = if callback_data.message_id_name.is_null() {
            Cow::from("")
        } else {
            ffi::CStr::from_ptr(callback_data.message_id_name).to_string_lossy()
        };

        let message = if callback_data.message.is_null() {
            Cow::from("")
        } else {
            ffi::CStr::from_ptr(callback_data.message).to_string_lossy()
        };

        match message_severity {
            DebugUtilsMessageSeverityFlagsEXT::VERBOSE => {
                tracing::trace!("[{message_id_name} ({message_id_number})]: {message}");
            }
            DebugUtilsMessageSeverityFlagsEXT::INFO => {
                tracing::debug!("[{message_id_name} ({message_id_number})]: {message}");
            }
            DebugUtilsMessageSeverityFlagsEXT::ERROR => {
                tracing::error!("[{message_id_name} ({message_id_number})]: {message}");
            }
            DebugUtilsMessageSeverityFlagsEXT::WARNING => {
                tracing::warn!("[{message_id_name} ({message_id_number})]: {message}");
            }
            _ => tracing::debug!("[{message_id_name} ({message_id_number})]: {message}"),
        }

        vk::FALSE
    }
}