direct3d11 0.1.7

Safe Direct3D 11 bindings. Currently just a minimal implementation mostly for use with direct2d, but I plan to flesh out the API eventually. If you're excited by this project and would like to contribute, pull requests are always open.
Documentation
use device::Device;

use dxgi::surface::Surface as DxgiSurface;
use dxgi::swap_chain::BackbufferTexture;
use winapi::ctypes::c_void;
use winapi::shared::dxgi::IDXGISurface;
use winapi::shared::guiddef::GUID;
use winapi::um::d3d11::ID3D11Texture2D;
use winapi::Interface;
use wio::com::ComPtr;

pub mod builder;
pub mod desc;

#[derive(Clone)]
pub struct Texture2D {
    ptr: ComPtr<ID3D11Texture2D>,
}

impl Texture2D {
    #[inline]
    pub fn create(device: &Device) -> builder::Texture2DBuilder {
        builder::Texture2DBuilder::new(device)
    }

    #[inline]
    pub fn as_dxgi(&self) -> DxgiSurface {
        unsafe { DxgiSurface::from_raw(self.ptr.cast::<IDXGISurface>().unwrap().into_raw()) }
    }

    #[inline]
    pub unsafe fn from_raw(raw: *mut ID3D11Texture2D) -> Self {
        Self {
            ptr: ComPtr::from_raw(raw),
        }
    }
}

unsafe impl BackbufferTexture for Texture2D {
    fn uuidof() -> GUID {
        ID3D11Texture2D::uuidof()
    }

    unsafe fn from_raw(raw: *mut c_void) -> Self {
        Texture2D::from_raw(raw as _)
    }
}

com_wrapper!(Texture2D: ID3D11Texture2D);