use crate::{arc, cg, define_cls, define_obj_type, ns, objc, simd};
define_obj_type!(
#[doc(alias = "ARLightEstimate")]
pub LightEstimate(ns::Id)
);
impl LightEstimate {
define_cls!(AR_LIGHT_ESTIMATE);
#[objc::msg_send(ambientIntensity)]
pub fn ambient_intensity(&self) -> cg::Float;
#[objc::msg_send(ambientColorTemperature)]
pub fn ambient_color_temperature(&self) -> cg::Float;
}
define_obj_type!(
#[doc(alias = "ARDirectionalLightEstimate")]
pub DirectionalLightEstimate(LightEstimate)
);
impl DirectionalLightEstimate {
define_cls!(AR_DIRECTIONAL_LIGHT_ESTIMATE);
#[objc::msg_send(sphericalHarmonicsCoefficients)]
pub fn spherical_harmonics_coefficients(&self) -> arc::R<ns::Data>;
#[doc(alias = "primaryLightDirection")]
#[cfg(target_arch = "aarch64")]
pub fn primary_light_direction(&self) -> simd::f32x3 {
let q0: std::arch::aarch64::float32x4_t;
unsafe {
core::arch::asm!(
"bl _objc_msgSend$primaryLightDirection",
in("x0") self,
lateout("q0") q0,
clobber_abi("C"),
);
}
simd::f32x3(q0)
}
#[cfg(not(target_arch = "aarch64"))]
#[doc(alias = "primaryLightDirection")]
pub fn primary_light_direction(&self) -> simd::f32x3 {
unimplemented!()
}
#[objc::msg_send(primaryLightIntensity)]
pub fn primary_light_intensity(&self) -> cg::Float;
}
unsafe extern "C" {
static AR_LIGHT_ESTIMATE: &'static objc::Class<LightEstimate>;
static AR_DIRECTIONAL_LIGHT_ESTIMATE: &'static objc::Class<DirectionalLightEstimate>;
}