use utils::vk_traits::*;
#[derive(Debug, Clone)]
pub struct VkGeometryInstanceFlags {
pub triangle_facing_cull_disable: bool,
pub triangle_front_counterclockwise: bool,
pub force_opaque: bool,
pub force_no_opaque: bool,
}
#[doc(hidden)]
pub type RawVkGeometryInstanceFlags = u32;
impl VkWrappedType<RawVkGeometryInstanceFlags> for VkGeometryInstanceFlags {
fn vk_to_raw(src: &VkGeometryInstanceFlags, dst: &mut RawVkGeometryInstanceFlags) {
*dst = 0;
if src.triangle_facing_cull_disable { *dst |= 0x00000001; }
if src.triangle_front_counterclockwise { *dst |= 0x00000002; }
if src.force_opaque { *dst |= 0x00000004; }
if src.force_no_opaque { *dst |= 0x00000008; }
}
}
impl VkRawType<VkGeometryInstanceFlags> for RawVkGeometryInstanceFlags {
fn vk_to_wrapped(src: &RawVkGeometryInstanceFlags) -> VkGeometryInstanceFlags {
VkGeometryInstanceFlags {
triangle_facing_cull_disable: (src & 0x00000001) != 0,
triangle_front_counterclockwise: (src & 0x00000002) != 0,
force_opaque: (src & 0x00000004) != 0,
force_no_opaque: (src & 0x00000008) != 0,
}
}
}
impl Default for VkGeometryInstanceFlags {
fn default() -> VkGeometryInstanceFlags {
VkGeometryInstanceFlags {
triangle_facing_cull_disable: false,
triangle_front_counterclockwise: false,
force_opaque: false,
force_no_opaque: false,
}
}
}
impl VkGeometryInstanceFlags {
pub fn none() -> Self {
VkGeometryInstanceFlags {
triangle_facing_cull_disable: false,
triangle_front_counterclockwise: false,
force_opaque: false,
force_no_opaque: false,
}
}
pub fn all() -> Self {
VkGeometryInstanceFlags {
triangle_facing_cull_disable: true,
triangle_front_counterclockwise: true,
force_opaque: true,
force_no_opaque: true,
}
}
pub fn to_u32(&self) -> u32 {
0
+ if self.triangle_facing_cull_disable { 0x00000001 } else { 0 }
+ if self.triangle_front_counterclockwise { 0x00000002 } else { 0 }
+ if self.force_opaque { 0x00000004 } else { 0 }
+ if self.force_no_opaque { 0x00000008 } else { 0 }
}
pub fn from_u32(value: u32) -> Self {
VkGeometryInstanceFlags {
triangle_facing_cull_disable: value & 0x00000001 > 0,
triangle_front_counterclockwise: value & 0x00000002 > 0,
force_opaque: value & 0x00000004 > 0,
force_no_opaque: value & 0x00000008 > 0,
}
}
}
#[doc(hidden)]
#[macro_export]
macro_rules! VkGeometryInstanceFlags {
( $( $x:ident ),* ) => {
VkGeometryInstanceFlags {
$($x: true,)*
..VkGeometryInstanceFlags::none()
}
}
}