#![cfg_attr(not(feature = "9ex"), allow(unused_imports))]
use crate::*;
use crate::d3d9::*;
use winapi::shared::d3d9::*;
use winapi::shared::minwindef::UINT;
use winapi::um::unknwnbase::IUnknown;
#[cfg(feature = "9ex")]
#[derive(Clone)] #[repr(transparent)]
pub struct SwapChainEx(pub(crate) mcom::Rc<IDirect3DSwapChain9Ex>);
#[cfg(feature = "9ex")] unsafe impl AsSafe<IUnknown > for SwapChainEx { fn as_safe(&self) -> &IUnknown { &***self.0 } }
#[cfg(feature = "9ex")] unsafe impl AsSafe<IDirect3DSwapChain9 > for SwapChainEx { fn as_safe(&self) -> &IDirect3DSwapChain9 { &**self.0 } }
#[cfg(feature = "9ex")] unsafe impl AsSafe<IDirect3DSwapChain9Ex> for SwapChainEx { fn as_safe(&self) -> &IDirect3DSwapChain9Ex { &*self.0 } }
#[cfg(feature = "9ex")]
pub trait IDirect3DSwapChain9ExExt : AsSafe<IDirect3DSwapChain9Ex> {
fn get_display_mode_ex(&self) -> Result<(DisplayModeEx, DisplayRotation), MethodError> {
let mut mode = DisplayModeEx::default();
let mut rot = 0;
let hr = unsafe { self.as_winapi().GetDisplayModeEx(&mut *mode, &mut rot) };
MethodError::check("IDirect3DSwapChain9Ex::GetDisplayModeEx", hr)?;
Ok((mode, DisplayRotation::from_unchecked(rot)))
}
fn get_last_present_count(&self) -> Result<UINT, MethodError> {
let mut count = 0;
let hr = unsafe { self.as_winapi().GetLastPresentCount(&mut count) };
MethodError::check("IDirect3DSwapChain9Ex::GetLastPresentCount", hr)?;
Ok(count)
}
fn get_present_statistics(&self) -> Result<PresentStats, MethodError> {
let mut stats = PresentStats::default();
let hr = unsafe { self.as_winapi().GetPresentStats(&mut *stats) };
MethodError::check("IDirect3DSwapChain9Ex::GetPresentStatistics", hr)?;
Ok(stats)
}
}
#[cfg(feature = "9ex")] impl IDirect3DSwapChain9ExExt for mcom::Rc<IDirect3DSwapChain9Ex> {}
#[cfg(feature = "9ex")] impl IDirect3DSwapChain9ExExt for super::SwapChainEx {}