let-engine 0.10.0

game engine
Documentation
use anyhow::{Context, Result};
use std::sync::Arc;
use vulkano::instance::{debug::*, Instance};

pub fn make_debug(instance: &Arc<Instance>) -> Result<DebugUtilsMessenger> {
    unsafe {
        DebugUtilsMessenger::new(
            instance.clone(),
            DebugUtilsMessengerCreateInfo {
                message_severity: DebugUtilsMessageSeverity::ERROR
                    | DebugUtilsMessageSeverity::WARNING
                    | DebugUtilsMessageSeverity::INFO
                    | DebugUtilsMessageSeverity::VERBOSE,
                message_type: DebugUtilsMessageType::GENERAL
                    | DebugUtilsMessageType::VALIDATION
                    | DebugUtilsMessageType::PERFORMANCE,
                ..DebugUtilsMessengerCreateInfo::user_callback(DebugUtilsMessengerCallback::new(
                    |severity, message_type, callback_data| {
                        let severity = if severity.intersects(DebugUtilsMessageSeverity::ERROR) {
                            "error"
                        } else if severity.intersects(DebugUtilsMessageSeverity::WARNING) {
                            "warning"
                        } else if severity.intersects(DebugUtilsMessageSeverity::INFO) {
                            "information"
                        } else if severity.intersects(DebugUtilsMessageSeverity::VERBOSE) {
                            "verbose"
                        } else {
                            panic!("no-impl");
                        };

                        let ty = if message_type.intersects(DebugUtilsMessageType::GENERAL) {
                            "general"
                        } else if message_type.intersects(DebugUtilsMessageType::VALIDATION) {
                            "validation"
                        } else if message_type.intersects(DebugUtilsMessageType::PERFORMANCE) {
                            "performance"
                        } else {
                            panic!("no-impl");
                        };

                        println!(
                            "{} {} {}: {}",
                            callback_data.message_id_name.unwrap_or("unknown"),
                            ty,
                            severity,
                            callback_data.message
                        );
                    },
                ))
            },
        ).context("There was a problem setting up a vulkan debug reporter.\nConsider turning off the `vulkan_debug_utils` feature for this build.")
    }
}