1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//! # OpenSubdiv
//! `Osd` contains device dependent code that makes [`far`](crate::far)
//! structures available on various backends such as *TBB*, *CUDA*, *OpenCL*,
//! *GLSL*, etc. The main roles of `osd` are:
//! * **Refinement**
//!
//!   Compute stencil-based uniform/adaptive subdivision on *CPU/GPU* backends.
//! * **Limit Stencil Evaluation**
//!
//!    Compute limit surfaces by limit stencils on *CPU/GPU* backends.
//! * **Limit Evaluation with `PatchTable`**
//!
//!   Compute limit surfaces by patch evaluation on *CPU/GPU* backends.
//! * **OpenGL/DX11/Metal Drawing with Hardware Tessellation**
//!
//!   Provide *GLSL/HLSL/Metal* tessellation functions for patch table.
//! * **Interleaved/Batched Buffer Configuration**
//!
//!   Provide consistent buffer descriptor to deal with arbitrary buffer layout.
//! * **Cross-Platform Implementation** Provide convenient ways to interop
//!   between compute and draw APIs.
//!
//! These are independently used by clients. For example, a client can use only
//! the limit stencil evaluation, or a client can refine subdivision surfaces
//! and draw them with the PatchTable and Osd tessellation shaders. All device
//! specific evaluation kernels are implemented in the Evaluator classes. Since
//! Evaluators don't own vertex buffers, clients should provide their own
//! buffers as a source and destination. There are some interop classes defined
//! in Osd for convenience.
//!
//! OpenSubdiv utilizes a series of regression tests to compare and enforce
//! identical results across different computational devices.
pub mod buffer_descriptor;
pub use buffer_descriptor::*;

pub mod cpu_evaluator;
pub use cpu_evaluator::*;

pub mod cpu_vertex_buffer;
pub use cpu_vertex_buffer::*;

pub mod cuda_vertex_buffer;
pub use cuda_vertex_buffer::*;

pub mod cuda_evaluator;
pub use cuda_evaluator::*;