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
3,436 个月下载量
用于 68 个工具箱 (5 个直接)
205KB
4.5K SLoC
spirv-std
组成 SPIR-V 的标准库的核心函数、特性和更多内容,用于 rust-gpu。
这个工具箱为 rust-gpu
着色器提供了访问所需 #![spirv(..)]
属性的权限,并提供各种 API,允许着色器访问 GPU 资源,如纹理和缓冲区。通过使用 "glam"
功能,它还包括一些样板 trait 实现,以便 glam
向量类型与这些 API 兼容。
示例
以下是一个简短摘录,以了解着色器的外观。有关上述图像生成着色器的完整详细信息,请参阅 源代码。
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