28 个版本 (8 个重大更改)

0.9.0 2023 年 7 月 25 日
0.7.0 2023 年 4 月 21 日
0.6.1 2023 年 3 月 20 日
0.4.0 2022 年 12 月 21 日
0.1.0 2020 年 10 月 23 日

#49 in 图形 API

Download history 1402/week @ 2024-03-13 1575/week @ 2024-03-20 1374/week @ 2024-03-27 1185/week @ 2024-04-03 1036/week @ 2024-04-10 1141/week @ 2024-04-17 1255/week @ 2024-04-24 981/week @ 2024-05-01 1010/week @ 2024-05-08 1122/week @ 2024-05-15 1096/week @ 2024-05-22 1085/week @ 2024-05-29 893/week @ 2024-06-05 760/week @ 2024-06-12 880/week @ 2024-06-19 758/week @ 2024-06-26

3,436 个月下载量
用于 68 个工具箱 (5 个直接)

MIT/Apache

205KB
4.5K SLoC

spirv-std

组成 SPIR-V 的标准库的核心函数、特性和更多内容,用于 rust-gpu

这个工具箱为 rust-gpu 着色器提供了访问所需 #![spirv(..)] 属性的权限,并提供各种 API,允许着色器访问 GPU 资源,如纹理和缓冲区。通过使用 "glam" 功能,它还包括一些样板 trait 实现,以便 glam 向量类型与这些 API 兼容。

示例

Sky shader

以下是一个简短摘录,以了解着色器的外观。有关上述图像生成着色器的完整详细信息,请参阅 源代码

use spirv_std::spirv;
use glam::{Vec3, Vec4, vec2, vec3};

#[spirv(fragment)]
pub fn main(
    #[spirv(frag_coord)] in_frag_coord: &Vec4,
    #[spirv(push_constant)] constants: &ShaderConstants,
    output: &mut Vec4,
) {
    let frag_coord = vec2(in_frag_coord.x, in_frag_coord.y);
    let mut uv = (frag_coord - 0.5 * vec2(constants.width as f32, constants.height as f32))
        / constants.height as f32;
    uv.y = -uv.y;

    let eye_pos = vec3(0.0, 0.0997, 0.2);
    let sun_pos = vec3(0.0, 75.0, -1000.0);
    let dir = get_ray_dir(uv, eye_pos, sun_pos);

    // evaluate Preetham sky model
    let color = sky(dir, sun_pos);

    *output = tonemap(color).extend(1.0)
}

入门

查看《rust-gpu》开发者指南,了解如何在项目中开始使用它。

SHADERed浏览器中实验rust-gpu着色器。

依赖项

约5MB
约137K SLoC