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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
//! # 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**<br> Compute stencil-based uniform/adaptive subdivision on
//! *CPU/GPU* backends.
//!
//! * **Limit Stencil Evaluation**<br> Compute limit surfaces by limit stencils
//! on *CPU/GPU* backends.
//!
//! * **Limit Evaluation with `PatchTable`**<br> Compute limit surfaces by patch
//! evaluation on *CPU/GPU* backends.
//!
//! * **OpenGL/DX11/Metal Drawing with Hardware Tessellation**<br> Provide
//! *GLSL/HLSL/Metal* tessellation functions for patch table.
//!
//! * **Interleaved/Batched Buffer Configuration**<br> Provide consistent buffer
//! descriptor to deal with arbitrary buffer layout.
//!
//! * **Cross-Platform Implementation**<br> 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 use *;
pub use *;
pub use *;
// Don't use wildcard export to avoid evaluate_stencils name conflicts
pub use CudaStencilTable;
pub use *;
// Don't use wildcard export to avoid evaluate_stencils name conflicts
pub use MetalStencilTable;
pub use *;
// Don't use wildcard export to avoid evaluate_stencils name conflicts
pub use OpenClStencilTable;