use super::topology_level::TopologyLevelPtr;
use num_enum::TryFromPrimitive;
pub const VTX_BOUNDARY_NONE: u8 =
crate::OpenSubdiv_v3_7_0_Sdc_Options_VtxBoundaryInterpolation_VTX_BOUNDARY_NONE as u8;
pub const FVAR_LINEAR_NONE: u8 =
crate::OpenSubdiv_v3_7_0_Sdc_Options_FVarLinearInterpolation_FVAR_LINEAR_NONE as u8;
#[repr(u32)]
#[derive(TryFromPrimitive, Copy, Clone, Debug)]
pub enum Scheme {
Bilinear = crate::OpenSubdiv_v3_7_0_Sdc_SchemeType_SCHEME_BILINEAR as _,
CatmullClark = crate::OpenSubdiv_v3_7_0_Sdc_SchemeType_SCHEME_CATMARK as _,
Loop = crate::OpenSubdiv_v3_7_0_Sdc_SchemeType_SCHEME_LOOP as _,
}
#[repr(u8)]
#[derive(TryFromPrimitive, Copy, Clone, Debug)]
pub enum BoundaryInterpolation {
EdgeOnly =
crate::OpenSubdiv_v3_7_0_Sdc_Options_VtxBoundaryInterpolation_VTX_BOUNDARY_EDGE_ONLY as _,
EdgeAndCorner =
crate::OpenSubdiv_v3_7_0_Sdc_Options_VtxBoundaryInterpolation_VTX_BOUNDARY_EDGE_AND_CORNER
as _,
}
#[repr(u8)]
#[derive(TryFromPrimitive, Copy, Clone, Debug)]
pub enum FaceVaryingLinearInterpolation {
CornersOnly =
crate::OpenSubdiv_v3_7_0_Sdc_Options_FVarLinearInterpolation_FVAR_LINEAR_CORNERS_ONLY as _,
CornersPlusOne =
crate::OpenSubdiv_v3_7_0_Sdc_Options_FVarLinearInterpolation_FVAR_LINEAR_CORNERS_PLUS1 as _,
CornersPlusTwo =
crate::OpenSubdiv_v3_7_0_Sdc_Options_FVarLinearInterpolation_FVAR_LINEAR_CORNERS_PLUS2 as _,
Boundaries =
crate::OpenSubdiv_v3_7_0_Sdc_Options_FVarLinearInterpolation_FVAR_LINEAR_BOUNDARIES as _,
All = crate::OpenSubdiv_v3_7_0_Sdc_Options_FVarLinearInterpolation_FVAR_LINEAR_ALL as _,
}
#[repr(u8)]
#[derive(TryFromPrimitive, Copy, Clone, Debug)]
pub enum CreasingMethod {
Uniform = crate::OpenSubdiv_v3_7_0_Sdc_Options_CreasingMethod_CREASE_UNIFORM as _,
Chaikin = crate::OpenSubdiv_v3_7_0_Sdc_Options_CreasingMethod_CREASE_CHAIKIN as _,
}
#[repr(u8)]
#[derive(TryFromPrimitive, Copy, Clone, Debug)]
pub enum TriangleSubdivision {
CatmullClark = crate::OpenSubdiv_v3_7_0_Sdc_Options_TriangleSubdivision_TRI_SUB_CATMARK as _,
Smooth = crate::OpenSubdiv_v3_7_0_Sdc_Options_TriangleSubdivision_TRI_SUB_SMOOTH as _,
}
pub type UniformRefinementOptions = crate::OpenSubdiv_v3_7_0_Far_TopologyRefiner_UniformOptions;
pub type AdaptiveRefinementOptions = crate::OpenSubdiv_v3_7_0_Far_TopologyRefiner_AdaptiveOptions;
pub type TopologyRefinerFactoryOptions =
crate::OpenSubdiv_v3_7_0_Far_TopologyRefinerFactory_Options;
pub type ConstIndexArray = crate::OpenSubdiv_v3_7_0_Far_ConstIndexArray;
pub type TopologyRefiner = crate::OpenSubdiv_v3_7_0_Far_TopologyRefiner;
pub type TopologyRefinerPtr = *mut TopologyRefiner;
#[link(name = "osd-capi", kind = "static")]
unsafe extern "C" {
pub fn TopologyRefinerFactory_TopologyDescriptor_Create(
descriptor: *const crate::OpenSubdiv_v3_7_0_Far_TopologyDescriptor,
options: TopologyRefinerFactoryOptions,
) -> TopologyRefinerPtr;
pub fn TopologyRefiner_destroy(refiner: TopologyRefinerPtr);
pub fn TopologyRefiner_GetNumLevels(refiner: TopologyRefinerPtr) -> u32;
pub fn TopologyRefiner_GetMaxValence(refiner: TopologyRefinerPtr) -> u32;
pub fn TopologyRefiner_GetNumVerticesTotal(refiner: TopologyRefinerPtr) -> u32;
pub fn TopologyRefiner_GetNumEdgesTotal(refiner: TopologyRefinerPtr) -> u32;
pub fn TopologyRefiner_GetNumFacesTotal(refiner: TopologyRefinerPtr) -> u32;
pub fn TopologyRefiner_GetNumFaceVerticesTotal(refiner: TopologyRefinerPtr) -> u32;
pub fn TopologyRefiner_GetLevel(refiner: TopologyRefinerPtr, level: i32) -> TopologyLevelPtr;
}