36个版本

使用旧的Rust 2015

0.8.3 2023年11月30日
0.8.2 2023年1月20日
0.8.1 2022年12月10日
0.8.0 2022年4月14日
0.2.0 2017年2月7日

#221 in 图形API

Download history 5343/week @ 2024-04-23 5523/week @ 2024-04-30 4696/week @ 2024-05-07 4609/week @ 2024-05-14 5404/week @ 2024-05-21 5880/week @ 2024-05-28 6390/week @ 2024-06-04 5582/week @ 2024-06-11 5254/week @ 2024-06-18 4914/week @ 2024-06-25 2303/week @ 2024-07-02 4742/week @ 2024-07-09 5368/week @ 2024-07-16 5062/week @ 2024-07-23 4833/week @ 2024-07-30 5214/week @ 2024-08-06

21,304 每月下载量
用于 少于 63 crate

Apache-2.0

28MB
620K SLoC

C++ 494K SLoC // 0.1% comments GLSL 53K SLoC // 0.0% comments Go 30K SLoC // 0.1% comments Python 12K SLoC // 0.3% comments JavaScript 6K SLoC // 0.0% comments C# 4.5K SLoC // 0.0% comments Lua 4.5K SLoC // 0.0% comments M4 4K SLoC // 0.0% comments Happy 4K SLoC Rust 2K SLoC // 0.0% comments D 2K SLoC // 0.0% comments Bazel 1.5K SLoC // 0.0% comments Shell 1K SLoC // 0.6% comments AsciiDoc 532 SLoC Forge Config 287 SLoC // 0.8% comments Bitbake 244 SLoC Batch 170 SLoC // 0.6% comments Ruby 87 SLoC // 0.1% comments HLSL 44 SLoC // 0.0% comments TypeScript 38 SLoC // 0.2% comments C 29 SLoC // 0.3% comments Emacs Lisp 8 SLoC // 0.7% comments

shaderc-rs

Version Documentation

Rust对shaderc库的绑定。

免责声明

这不是一个官方的Google产品(实验性或其他),这只是Google拥有的代码。

用法

包含的shaderc-sys crate使用build.rs来发现或构建shaderc库的副本。请参阅设置部分。

首先添加到您的Cargo.toml

[dependencies]
shaderc = "0.8"

然后添加到您的crate根目录

extern crate shaderc;

文档

shaderc提供了编译GLSL/HLSL源代码到SPIR-V二进制模块或汇编代码的Compiler接口。它还可以将SPIR-V汇编转换为二进制模块。默认的编译行为可以使用CompileOptions进行调整。成功的结果保存在CompilationArtifact中。

请参阅Documentation以获取详细文档。

示例

编译着色器到SPIR-V二进制模块和汇编文本

use shaderc;

let source = "#version 310 es\n void EP() {}";

let mut compiler = shaderc::Compiler::new().unwrap();
let mut options = shaderc::CompileOptions::new().unwrap();
options.add_macro_definition("EP", Some("main"));
let binary_result = compiler.compile_into_spirv(
    source, shaderc::ShaderKind::Vertex,
    "shader.glsl", "main", Some(&options)).unwrap();

assert_eq!(Some(&0x07230203), binary_result.as_binary().first());

let text_result = compiler.compile_into_spirv_assembly(
    source, shaderc::ShaderKind::Vertex,
    "shader.glsl", "main", Some(&options)).unwrap();

assert!(text_result.as_text().starts_with("; SPIR-V\n"));

设置

shaderc-rs需要C++的shaderc库。它包含在Vulkan SDK中。您可能可以使用一些Linux发行版的包管理器直接安装它。C++ shaderc项目提供了工件下载。您也可以从源代码构建它

在尝试获取本地 shaderc 的优先级顺序中,可以通过几个选项控制构建脚本,这些选项在构建 shaderc-rs 时传递给 shaderc-sys

  1. 如果指定了选项 --features build-from-source,则从源码构建。
  2. 如果将环境变量 SHADERC_LIB_DIR 设置为 /path/to/shaderc/libs/,则会搜索该路径以查找本地动态或静态 shaderc 库。
  3. 如果设置了环境变量 VULKAN_SDK,则会在 $VULKAN_SDK/lib 搜索本地动态或静态 shaderc 库。
  4. 在 Linux 上,如果未设置 SHADERC_LIB_DIR,则会额外搜索系统库路径,如 /usr/lib/,以查找本地动态或 shaderc 库。
  5. 如果通过以上步骤找不到本地 shaderc 库,则从源码构建。

对于每个库目录,构建脚本将首先尝试查找并链接到动态本地 shaderc 库 shaderc_shared,然后是静态本地 shaderc 库 shaderc_combined。要优先搜索静态库然后是动态库,可以使用选项 --features prefer-static-linking

从源码构建

shaderc-sys 的 build.rs 会自动检出并编译本地 C++ shaderc 的副本,并将其链接到生成的工件,这需要 gitcmakepythonPATH 中存在。

  • CMake
  • Git
  • Python(仅适用于 Python 3,在 Windows 上,可执行文件必须命名为 python.exe
  • 一个 C++11 编译器

此外

  • 在 windows-msvc 上需要 Ninja,但在所有其他平台上是可选的。

这些需求可以使用您喜欢的包管理器或从项目的网站上的安装程序进行安装。下面是一些示例设置方法。

windows-msvc 示例设置

  1. rustupdefault stable-x86_64-pc-windows-msvc
  2. 安装 Build Tools for Visual Studio 2017。如果您已经使用过此工具链,则它可能已经安装。
  3. 安装上述列出的必要工具,并将它们的路径添加到环境变量 PATH 中。

windows-gnu 示例设置

windows-gnu 工具链不受支持,但您可以从 windows-msvc 交叉编译到 windows-gnu。

步骤 1 和 2 是通过使用与 rust 相同的 mingw 来解决 https://github.com/rust-lang/rust/issues/49078

  1. 下载并解压 https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/x86_64-6.3.0-release-posix-seh-rt_v5-rev2.7z
  2. 将 mingw64\bin 的绝对路径添加到您的环境变量 PATH 中。
  3. 运行命令: rustup default stable-x86_64-pc-windows-msvc
  4. 运行命令: rustup target install x86_64-pc-windows-gnu
  5. 安装 Build Tools for Visual Studio 2017。如果您已经使用过此工具链,则它可能已经安装。
  6. 安装 msys2,按照所有说明进行。
  7. 然后在 msys2 终端中运行: pacman --noconfirm -Syu mingw-w64-x86_64-cmake mingw-w64-x86_64-make mingw-w64-x86_64-python3 mingw-w64-x86_64-ninja
  8. 将 msys2 mingw64 二进制路径添加到环境变量 PATH 中。
  9. 任何构建项目的货物命令都需要包含 --target x86_64-pc-windows-gnu,例如运行:cargo run --target x86_64-pc-windows-gnu

Linux 示例设置

使用您的包管理器安装所需的开发工具

例如在 ubuntu 上

sudo apt-get install build-essential cmake git ninja python3

在 Arch Linux 上,您可以直接安装 shaderc 包

macOS 示例设置

假设 Homebrew

brew install git cmake ninja [email protected]

贡献

该项目遵循 Apache 2 许可协议。在贡献之前,请参阅 贡献指南

作者

该项目由 Zhang Lei (@antiagainst) 初始化并主要开发。

依赖关系