#vulkan-bindings #vulkan-graphics #vulkan #generated-bindings #graphics #pointers

mira

从 Vulkan-Headers 生成的纯净、简单的 Vulkan 绑定!

26 个版本

0.1.25 2023 年 7 月 17 日
0.1.22 2023 年 6 月 2 日
0.1.21 2023 年 1 月 23 日
0.1.20 2022 年 8 月 9 日
0.1.12 2021 年 11 月 19 日

#114 in 图形 API


用于 runa

Apache-2.0

2.5MB
41K SLoC

Rust 30K SLoC // 0.0% comments C++ 9K SLoC // 0.1% comments JavaScript 1.5K SLoC // 0.1% comments Python 253 SLoC // 0.2% comments GLSL 46 SLoC // 0.6% comments Batch 4 SLoC

包含 (DOS 可执行文件, 395KB) VmaSample_Release_vs2019.exe

mira

crates.io docs.rs license

从 Vulkan-Headers 生成的纯净、简单的 Vulkan 绑定!

Mira 提供了一种简单直观的方式与 Vulkan 交互。一切都是通过 bindgen 生成的,并使用原始 API 名称。

此 crate 提供

  • 👀 函数指针!
  • 💯 实例和设备命令的动态加载器!
  • ✍️ 命令、结构和宏的原名称!
  • 💪 额外的有用功能,以帮助开发!
  • 😀 简单的示例!

代码

枚举所有实例扩展。

use mira::error::MiraError;
use mira::loader;
use mira::mem::{zeroed_vec, from_cstring};
use mira::vulkan::*;
use const_cstr::*;

fn main() -> Result<(), MiraError> {
    let enumerate_instance_extensions:PFN_vkEnumerateInstanceExtensionProperties;
    enumerate_instance_extensions = unsafe {
        loader::instance(std::ptr::null_mut(), const_cstr!("vkEnumerateInstanceExtensionProperties"))?
    };

    let mut count:u32 = 0;
    unsafe { enumerate_instance_extensions(std::ptr::null_mut(), &mut count, std::ptr::null_mut()) };
    let mut extensions = unsafe { zeroed_vec::<VkExtensionProperties>(count as usize) };

    unsafe { enumerate_instance_extensions(std::ptr::null_mut(), &mut count, extensions.as_mut_ptr()) };

    println!("Instance extensions");
    for extension in extensions.iter().enumerate() {
        let str = match unsafe { from_cstring(extension.1.extensionName.as_ptr()) } {
            Ok(str) => str,
            Err(_) => continue,
        };

        println!("extension #{} - {}", extension.0, str);
    }

    Ok(())
}

示例

在 Linux(Lubuntu 20.04) 上与 Intel(R) HD Graphics 620 (KBL GT2) 成功测试。

颜色

显示一个带有紫色背景的窗口。

cargo run --example color

screenshot

Vulkan 版本

1.3.257

Vulkan 变更日志

许可证

Apache 2.0

依赖项

~0.4–7.5MB
~56K SLoC