pub mod spec;
pub mod tokens;
mod compute;
mod conform;
mod schema;
mod traits;
pub use compute::{compute_namespaced_settings, compute_render_spec};
pub use conform::{apply_aspect_ratio_policy, ConformedAperture};
pub use schema::{RenderDenoisePass, RenderPass, RenderProduct, RenderSettings, RenderVar};
pub use traits::RenderSettingsBase;
use tokens::*;
macro_rules! impl_render_schema {
(typed $ty:ident) => {
impl $crate::usd::SchemaBase for $ty {
const KIND: $crate::usd::SchemaKind = $crate::usd::SchemaKind::ConcreteTyped;
fn prim(&self) -> &$crate::usd::Prim {
&self.0
}
}
};
(settings_base $ty:ident) => {
impl_render_schema!(typed $ty);
impl $crate::schemas::render::RenderSettingsBase for $ty {}
};
}
pub(crate) use impl_render_schema;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum AspectRatioConformPolicy {
#[default]
ExpandAperture,
CropAperture,
AdjustApertureWidth,
AdjustApertureHeight,
AdjustPixelAspectRatio,
}
impl AspectRatioConformPolicy {
pub fn as_token(self) -> &'static str {
match self {
AspectRatioConformPolicy::ExpandAperture => CONFORM_EXPAND_APERTURE,
AspectRatioConformPolicy::CropAperture => CONFORM_CROP_APERTURE,
AspectRatioConformPolicy::AdjustApertureWidth => CONFORM_ADJUST_APERTURE_WIDTH,
AspectRatioConformPolicy::AdjustApertureHeight => CONFORM_ADJUST_APERTURE_HEIGHT,
AspectRatioConformPolicy::AdjustPixelAspectRatio => CONFORM_ADJUST_PIXEL_ASPECT_RATIO,
}
}
pub fn from_token(s: &str) -> Option<Self> {
Some(match s {
CONFORM_EXPAND_APERTURE => AspectRatioConformPolicy::ExpandAperture,
CONFORM_CROP_APERTURE => AspectRatioConformPolicy::CropAperture,
CONFORM_ADJUST_APERTURE_WIDTH => AspectRatioConformPolicy::AdjustApertureWidth,
CONFORM_ADJUST_APERTURE_HEIGHT => AspectRatioConformPolicy::AdjustApertureHeight,
CONFORM_ADJUST_PIXEL_ASPECT_RATIO => AspectRatioConformPolicy::AdjustPixelAspectRatio,
_ => return None,
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum ProductType {
#[default]
Raster,
DeepRaster,
}
impl ProductType {
pub fn as_token(self) -> &'static str {
match self {
ProductType::Raster => PRODUCT_TYPE_RASTER,
ProductType::DeepRaster => PRODUCT_TYPE_DEEP_RASTER,
}
}
pub fn from_token(s: &str) -> Option<Self> {
Some(match s {
PRODUCT_TYPE_RASTER => ProductType::Raster,
PRODUCT_TYPE_DEEP_RASTER => ProductType::DeepRaster,
_ => return None,
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum SourceType {
#[default]
Raw,
Primvar,
Lpe,
Intrinsic,
}
impl SourceType {
pub fn as_token(self) -> &'static str {
match self {
SourceType::Raw => SOURCE_TYPE_RAW,
SourceType::Primvar => SOURCE_TYPE_PRIMVAR,
SourceType::Lpe => SOURCE_TYPE_LPE,
SourceType::Intrinsic => SOURCE_TYPE_INTRINSIC,
}
}
pub fn from_token(s: &str) -> Option<Self> {
Some(match s {
SOURCE_TYPE_RAW => SourceType::Raw,
SOURCE_TYPE_PRIMVAR => SourceType::Primvar,
SOURCE_TYPE_LPE => SourceType::Lpe,
SOURCE_TYPE_INTRINSIC => SourceType::Intrinsic,
_ => return None,
})
}
}
crate::schemas::common::impl_token_value!(AspectRatioConformPolicy, ProductType, SourceType);