7 个版本 (破坏性更新)
使用旧的 Rust 2015
0.12.0 | 2018年4月21日 |
---|---|
0.11.0 | 2018年4月7日 |
0.10.0 | 2018年1月7日 |
0.9.0 | 2018年1月3日 |
0.1.0 | 2016年9月14日 |
在 渲染 中排名 126
用于 rasen-dsl
115KB
2.5K SLoC
rasen
rasen 包含核心图编译器本身。它提供了图构建工具(Graph
结构体),各种类型(rasen::types::*
)和操作(rasen::node::*
定义),以及 SPIR-V 编译工具(ModuleBuilder
结构体)。
API 故意设计为低级,因为核心编译器的用例是作为游戏引擎中基于图的材质编辑器的后端。完全可以通过创建一个 Graph
结构体并逐节点构建模块来使用这个包,但是这种方法对于“静态”着色器来说通常比较冗长。
extern crate rasen;
use rasen::prelude::*;
fn main() {
let mut graph = Graph::new();
// A vec3 input at location 0
let normal = graph.add_node(Node::Input(0, TypeName::VEC3, VariableName::Named(String::from("a_normal"))));
// Some ambient light constants
let min_light = graph.add_node(Node::Constant(TypedValue::Float(0.1)));
let max_light = graph.add_node(Node::Constant(TypedValue::Float(1.0)));
let light_dir = graph.add_node(Node::Constant(TypedValue::Vec3(0.3, -0.5, 0.2)));
// The Material color (also a constant)
let mat_color = graph.add_node(Node::Constant(TypedValue::Vec4(0.25, 0.625, 1.0, 1.0)));
// Some usual function calls
let normalize = graph.add_node(Node::Normalize);
let dot = graph.add_node(Node::Dot);
let clamp = graph.add_node(Node::Clamp);
let multiply = graph.add_node(Node::Multiply);
// And a vec4 output at location 0
let color = graph.add_node(Node::Output(0, TypeName::VEC4, VariableName::Named(String::from("o_color"))));
// Normalize the normal
graph.add_edge(normal, normalize, 0);
// Compute the dot product of the surface normal and the light direction
graph.add_edge(normalize, dot, 0);
graph.add_edge(light_dir, dot, 1);
// Restrict the result into the ambient light range
graph.add_edge(dot, clamp, 0);
graph.add_edge(min_light, clamp, 1);
graph.add_edge(max_light, clamp, 2);
// Multiply the light intensity by the surface color
graph.add_edge(clamp, multiply, 0);
graph.add_edge(mat_color, multiply, 1);
// Write the result to the output
graph.add_edge(multiply, color, 0);
let bytecode = build_program(&graph, ShaderType::Fragment).unwrap();
// bytecode is now a Vec<u8> you can pass to Vulkan to create the shader module
}
依赖项
~11MB
~224K SLoC