2 个不稳定版本
0.2.0 | 2023 年 2 月 21 日 |
---|---|
0.1.0 | 2021 年 4 月 13 日 |
#720 in 图形 API
2.5MB
45K SLoC
OpenSubdiv Petite
为 Pixar 的 OpenSubdiv 库提供的选择性 Rust 封装。
版本
目前,箱子的版本反映了 Rust 侧的代码成熟度。它们与封装的 OpenSubdiv 版本没有任何关系。
v0.1.x
– OpenSubdivv3.4.4
功能
有几个功能可以控制当 OpenSubdiv 构建时的相应 构建标志。
几乎都没有实现。
-
clew
– 待定。添加对 CLEW 的支持。 -
cuda
– 添加对 Nvidia CUDA 后端的支持。仅适用于 Linux/Windows。CUDA 支持几乎完成(Rust API 封装已存在)。只需在build.rs
中进行更多工作。理想情况下,如果存在cuda
功能标志,则build.rs
会检测 Linux/Windows 上的 CUDA 安装并配置 OpenSubdiv 构建,如果找不到安装则引发 panic。 - 待定。添加对 Apple Metal 后端的支持。仅适用于 macOS。
-
opencl
– 待定。添加对 OpenCL 后端的支持。 -
ptex
– 待定。添加对 PTex 的支持。 -
topology_validation
– 执行(昂贵的)拓扑验证。这将在Rust端检查索引边界,并在FFI端激活一系列拓扑检查。 默认情况下是开启的! 在Cargo.toml
中设置default-features = false
来关闭此功能 – 建议用于release
构建。
macOS上的OpenMP支持
OpenMP 在macOS上的CMake侧检测存在问题。在CMake跟踪器中有 一些问题 是开放的。我在这里添加了一些评论 这里。
可能存在一个解决方案。欢迎PR。如果您需要在 OpenSubdiv 端进行修复,Pixar可能也会欢迎PR。
限制
原始库在许多地方使用了C++模板。包装器有特定的实现来覆盖最常见的情况。
C++工厂类已合并到相应的结构体的 new()
方法中,该结构体反映了C++工厂所构建的类。
C++ API变化
许多方法在Rust侧具有略微不同的名称。
重命名是在考虑以下约束的情况下进行的
- 保持一致性(原始API相当冗长,但在一些令人惊讶的地方使用了缩写)。
- 使用规范的Rust命名 – (
num_vertices()
变为vertices_len()
)。 - 使用规范的Rust构造。大多数选项/配置结构体使用 初始化结构模式。在不便于轻松映射到Rust结构体的地方,使用构建器模式(或者根据你问的人,可能是一种反模式)。
- 尽可能简短。例如:C++中的
StencilTable::numStencils()
在Rust中变为StencilTable::len()
。 - 对于只能包含正值的任何内容(索引、大小/长度/计数、价、arity等),使用无符号整数类型,特别是
usize
和u32
,而不是有符号类型(i32
)。类型应表达意图。另请参阅 这里。
依赖项
~1.2–4MB
~81K SLoC