/* automatically generated by rust-bindgen */

# [ repr ( C ) ]
# [ derive ( Debug , Copy , Clone ) ]
pub struct dwl_context {
    _unused: [u8; 0],
}
# [ repr ( C ) ]
# [ derive ( Debug , Copy , Clone ) ]
pub struct dwl_dmabuf {
    _unused: [u8; 0],
}
# [ repr ( C ) ]
# [ derive ( Debug , Copy , Clone ) ]
pub struct dwl_surface {
    _unused: [u8; 0],
}
extern "C" {
    pub fn dwl_context_new() -> *mut dwl_context;
}
extern "C" {
    pub fn dwl_context_destroy(self_: *mut *mut dwl_context);
}
extern "C" {
    pub fn dwl_context_setup(self_: *mut dwl_context) -> bool;
}
extern "C" {
    pub fn dwl_context_fd(self_: *mut dwl_context) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn dwl_context_dispatch(self_: *mut dwl_context);
}
extern "C" {
    pub fn dwl_context_dmabuf_new(self_: *mut dwl_context,
                                  fd: ::std::os::raw::c_int,
                                  offset: u32,
                                  stride: u32,
                                  modifiers: u64,
                                  width: u32,
                                  height: u32,
                                  fourcc: u32)
                                  -> *mut dwl_dmabuf;
}
extern "C" {
    pub fn dwl_dmabuf_in_use(self_: *mut dwl_dmabuf) -> bool;
}
extern "C" {
    pub fn dwl_dmabuf_destroy(self_: *mut *mut dwl_dmabuf);
}
extern "C" {
    pub fn dwl_context_surface_new(self_: *mut dwl_context,
                                   parent: *mut dwl_surface,
                                   shm_fd: ::std::os::raw::c_int,
                                   shm_size: usize,
                                   buffer_size: usize,
                                   width: u32,
                                   height: u32,
                                   stride: u32)
                                   -> *mut dwl_surface;
}
extern "C" {
    pub fn dwl_surface_destroy(self_: *mut *mut dwl_surface);
}
extern "C" {
    pub fn dwl_surface_commit(self_: *mut dwl_surface);
}
extern "C" {
    pub fn dwl_surface_buffer_in_use(self_: *mut dwl_surface, buffer_index: usize) -> bool;
}
extern "C" {
    pub fn dwl_surface_flip(self_: *mut dwl_surface, buffer_index: usize);
}
extern "C" {
    pub fn dwl_surface_flip_to(self_: *mut dwl_surface, dmabuf: *mut dwl_dmabuf);
}
extern "C" {
    pub fn dwl_surface_close_requested(self_: *const dwl_surface) -> bool;
}
extern "C" {
    pub fn dwl_surface_set_position(self_: *mut dwl_surface, x: u32, y: u32);
}