3个稳定版本
1.3.238+1 | 2022年12月30日 |
---|---|
1.3.238 |
|
1.3.237 | 2022年12月10日 |
1.3.235 | 2022年12月1日 |
#404 in 图形API
每月下载 39次
2MB
32K SLoC
包含 (DOS可执行文件, 50KB) dummy_library_pe_64.so, (Windows DLL, 37KB) dummy_library_pe_32.dll, (DOS可执行文件, 37KB) dummy_library_pe_32.so, (Windows DLL, 50KB) dummy_library_pe_64.dll, (ELF可执行文件/库, 18KB) dummy_library_elf_64.dll, (ELF库, 18KB) libdummy_library_elf_64.so 以及更多.
Vulkan加载器
此crate包含对Khronos集团官方Vulkan ICD加载器的原始FFI绑定。Vulkan加载器是一个主要用C编写的库,旨在定位和加载Vulkan函数指针,以便应用程序可以使用它们。它作为Vulkan SDK的一部分包含,但也可以作为一个独立的单元使用。
由于它只是一个FFI绑定,此crate将暴露Vulkan的原始C接口。它不提供任何可能存在于其他Rust Vulkan绑定中的辅助函数、特性、生命周期注释或构建器模式。因此,Vulkan API函数将与C或C++ Vulkan应用程序中的函数相同。这可能使您更容易遵循为C++开发者编写的Vulkan教程,但对于实际应用,此crate可能不是最佳选择。
由于我是此绑定的作者,没有Mac,也不了解Mac开发,因此目前不支持macOS和iOS。如果您需要macOS或iOS支持,请随时提出pull request。由于类似原因,Android也不支持。任天堂Switch也不支持,但原因不同。
如果您在将此crate添加到项目时遇到问题,请在此仓库中提出问题。
简介
Vulkan 是一个显式 API,它允许直接控制 GPU 的实际工作方式。因此,Vulkan 支持具有多个 GPU 的系统,每个 GPU 使用不同的驱动程序或 ICD(可安装客户端驱动程序)。Vulkan 还支持多个全局上下文(在 Vulkan 术语中称为实例)。ICD 加载器是一个库,位于 Vulkan 应用程序和任意数量的 Vulkan 驱动程序之间,以支持多个驱动程序以及在驱动程序之间工作的实例级功能。此外,加载器还负责在应用程序和驱动程序之间插入 Vulkan 层库,例如验证层。
此存储库包含用于 Linux 和 Windows 的 Vulkan 加载器的 FFI 绑定。存储库也支持 macOS 和 iOS,但当前没有提供绑定。还有一个由 Google 维护的独立加载器,用于 Android,但不受这些绑定的覆盖。
使用此存储库
您需要做的第一件事是安装一些先决条件。
- LLVM Clang。这是 bindgen 解析头文件并生成绑定的必要条件。
- 选择您喜欢的 C/C++ 编译器。这是编译 Vulkan 加载器本身所必需的。
- CMake。这是构建 Vulkan 加载器本身所必需的。
- Python。这是下载和配置 Vulkan 加载器本身所依赖的 C/C++ 依赖项所必需的。
在您安装了先决条件之后,您可以简单地执行 cargo add vulkan_loader_sys
将其添加为项目的依赖项。
示例
以下是一个使用此存储库与 Vulkan API 交互的应用程序的示例。它创建一个 Vulkan 实例,销毁它,然后立即退出。它应该为您提供一个关于此绑定结构的基本概念。
use vulkan_loader_sys::*;
use std::ptr::{null, null_mut};
fn main() {
let application_info = VkApplicationInfo {
sType: VK_STRUCTURE_TYPE_APPLICATION_INFO,
pNext: null(),
pApplicationName: b"Triangle Example\0".as_ptr() as *const i8,
applicationVersion: 1,
pEngineName: null(),
engineVersion: 0,
apiVersion: VK_MAKE_API_VERSION(0, 1, 2, 0),
};
let create_info = VkInstanceCreateInfo {
sType: VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
pNext: null(),
flags: 0,
pApplicationInfo: &application_info,
enabledLayerCount: 0,
ppEnabledLayerNames: null(),
enabledExtensionCount: 0,
ppEnabledExtensionNames: null(),
};
let mut instance = null_mut();
let result = vkCreateInstance(&create_info, null(), &mut instance);
if result != VK_SUCCESS {
panic!("Failed to create the instance. Vulkan error {}.", result);
}
vkDestroyInstance(instance, null());
}
许可证
Vulkan 加载器项目作为开源软件发布,遵循 Apache 风格许可协议,由 Khronos 组织提供版权保护。因此,提供 Vulkan 加载器绑定的此存储库也以相同的许可证发布。
致谢
尽管 Vulkan 加载器项目主要是由 LunarG,Inc. 开发的,但还有许多其他公司和个人使该项目成为可能:Valve Corporation 资助项目开发;Khronos 提供监督和项目托管。至于提供 FFI 绑定的存储库,目前仅由我一个人开发。