3个不稳定版本
0.2.1 | 2024年7月13日 |
---|---|
0.2.0 | 2024年7月11日 |
0.1.0 | 2024年7月10日 |
#582 in 过程宏
23KB
319 行
wgsl_ln
用于在Rust中编写wgsl的实验性crate!
wgsl!
宏
wgsl!
宏将普通Rust标记转换为wgsl &'static str
,类似于stringify!
。这也使用naga
验证wgsl字符串。错误将报告正确的范围。
pub static MANHATTAN_DISTANCE: &str = wgsl!(
fn manhattan_distance(a: vec2<f32>, b: vec2<f32>) -> f32 {
return abs(a.x - b.x) + abs(a.y - b.y);
}
);
大多数错误可以在编译时捕获。
pub static MANHATTAN_DISTANCE: &str = wgsl!(
fn manhattan_distance(a: vec2<f32>, b: vec2<f32>) -> f32 {
// not allowed in wgsl
abs(a.x - b.x) + abs(a.y - b.y)
}
);
#[wgsl_export(name)]
宏
通过wgsl_export
导出wgsl项目(函数、结构体等)。必须与导出项目的name
相同。
#[wgsl_export(manhattan_distance)]
pub static MANHATTAN_DISTANCE: &str = wgsl!(
fn manhattan_distance(a: vec2<f32>, b: vec2<f32>) -> f32 {
return abs(a.x - b.x) + abs(a.y - b.y);
}
);
使用导出项目
pub static MANHATTAN_DISTANCE_TIMES_FIVE: &str = wgsl!(
fn manhattan_distance_times_five(a: vec2<f32>, b: vec2<f32>) -> f32 {
return #manhattan_distance(a, b) * 5.0;
}
);
#manhattan_distance
将manhattan_distance
函数复制到模块中,使其可用。您可以为多个实例指定#manhattan_distance
或省略后续使用中的#
。
实际上发生了什么?
wgsl_export
创建一个将自身粘贴到wgsl!
宏中的macro_rules!
宏。该宏是#[doc(hidden)]
并在crate根目录中可用,即crate::__wgsl_paste_manhattan_distance!
。
使用您crate中定义的项目时,无需导入任何内容;对于其他crate,您可能希望导入crate根目录。
mod my_shaders {
pub use external_shader_defs::*;
pub static MAGIC: &str = wgsl!(
fn magic() -> f32 {
return #magic_number();
}
)
}
pub use my_shaders::MAGIC;
naga_oil
支持
启用 naga_oil
功能以启用有限的 naga_oil
支持
- 将
#preprocessor_macro_name
作为标记而不是导入处理。#define_import_path
#import
#if
#ifdef
#ifndef
#else
#endif
这些值不再可导入。
- 检测到 naga_oil 预处理器宏时将禁用检查。
许可证
在以下许可证中选择一个:
Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0) MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT),任选其一。
贡献
欢迎贡献!
除非您明确表示,否则您提交给工作内容的任何贡献,如 Apache-2.0 许可证中定义,应按上述方式双许可,没有任何附加条款或条件。
依赖项
~5–13MB
~153K SLoC