2 个不稳定版本

0.2.0 2023 年 2 月 21 日
0.1.0 2021 年 4 月 13 日

#720 in 图形 API

Apache-2.0

2.5MB
45K SLoC

C++ 34K SLoC // 0.2% comments Metal Shading Language 3K SLoC // 0.2% comments GLSL 2.5K SLoC // 0.2% comments HLSL 2.5K SLoC // 0.2% comments Rust 2K SLoC // 0.1% comments Objective-C++ 1K SLoC // 0.1% comments Python 727 SLoC // 0.2% comments CUDA 295 SLoC // 0.2% comments

OpenSubdiv Petite OpenSubdiv Logo

为 Pixar 的 OpenSubdiv 库提供的选择性 Rust 封装。

版本

目前,箱子的版本反映了 Rust 侧的代码成熟度。它们与封装的 OpenSubdiv 版本没有任何关系。

  • v0.1.xOpenSubdiv v3.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等),使用无符号整数类型,特别是 usizeu32,而不是有符号类型(i32)。类型应表达意图。另请参阅 这里

依赖项

~1.2–4MB
~81K SLoC