#![allow(dead_code)]
use winapi::shared::d3d9::IDirect3DStateBlock9;
use winapi::um::unknwnbase::IUnknown;
use crate::*;
use crate::d3d9::*;
use std::ptr::null_mut;
#[derive(Clone)] #[repr(transparent)]
pub struct StateBlock(pub(crate) mcom::Rc<IDirect3DStateBlock9>);
unsafe impl AsSafe<IUnknown > for StateBlock { fn as_safe(&self) -> &IUnknown { &**self.0 } }
unsafe impl AsSafe<IDirect3DStateBlock9 > for StateBlock { fn as_safe(&self) -> &IDirect3DStateBlock9 { &*self.0 } }
pub trait IDirect3DStateBlock9Ext : AsSafe<IDirect3DStateBlock9> {
fn apply(&self) -> Result<(), MethodError> {
let hr = unsafe { self.as_winapi().Apply() };
MethodError::check("IDirect3DStateBlock9::Apply", hr)
}
fn capture(&self) -> Result<(), MethodError> {
let hr = unsafe { self.as_winapi().Capture() };
MethodError::check("IDirect3DStateBlock9::Capture", hr)
}
fn get_device(&self) -> Result<Device, MethodError> {
let mut device = null_mut();
let hr = unsafe { self.as_winapi().GetDevice(&mut device) };
MethodError::check("IDirect3DStateBlock9::GetDevice", hr)?;
Ok(unsafe { Device::from_raw(device) })
}
}
impl<T: AsSafe<IDirect3DStateBlock9>> IDirect3DStateBlock9Ext for T {}
#[test] fn begin_end_state_block() {
use dev::d3d9::*;
let device = device_test();
assert_eq!(D3DERR::INVALIDCALL, device.end_state_block().err());
device.begin_state_block().unwrap();
device.end_state_block().unwrap();
assert_eq!(D3DERR::INVALIDCALL, device.end_state_block().err());
device.begin_state_block().unwrap();
assert_eq!(D3DERR::INVALIDCALL, device.begin_state_block().err()); device.end_state_block().unwrap();
assert_eq!(D3DERR::INVALIDCALL, device.end_state_block().err());
}