2018-11-27 21:52:42 +00:00
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files)
// DO NOT EDIT
use Error ;
use GLAPI ;
use GLContext ;
use GLDisplayType ;
use GLWindow ;
use ffi ;
use glib ;
2019-01-16 11:32:39 +00:00
use glib ::object ::Cast ;
2018-11-27 21:52:42 +00:00
use glib ::object ::IsA ;
use glib ::signal ::SignalHandlerId ;
2018-12-08 09:05:20 +00:00
use glib ::signal ::connect_raw ;
2018-11-27 21:52:42 +00:00
use glib ::translate ::* ;
use glib_ffi ;
use gst ;
use std ::boxed ::Box as Box_ ;
use std ::mem ::transmute ;
use std ::ptr ;
glib_wrapper! {
2019-01-16 11:32:39 +00:00
pub struct GLDisplay ( Object < ffi ::GstGLDisplay , ffi ::GstGLDisplayClass , GLDisplayClass > ) @ extends gst ::Object ;
2018-11-27 21:52:42 +00:00
match fn {
get_type = > | | ffi ::gst_gl_display_get_type ( ) ,
}
}
impl GLDisplay {
pub fn new ( ) -> GLDisplay {
assert_initialized_main_thread! ( ) ;
unsafe {
from_glib_full ( ffi ::gst_gl_display_new ( ) )
}
}
}
impl Default for GLDisplay {
fn default ( ) -> Self {
Self ::new ( )
}
}
unsafe impl Send for GLDisplay { }
unsafe impl Sync for GLDisplay { }
2019-01-16 11:32:39 +00:00
pub const NONE_GL_DISPLAY : Option < & GLDisplay > = None ;
2018-12-08 09:05:20 +00:00
pub trait GLDisplayExt : 'static {
2019-01-16 11:32:39 +00:00
fn add_context < P : IsA < GLContext > > ( & self , context : & P ) -> Result < ( ) , glib ::error ::BoolError > ;
2018-11-27 21:52:42 +00:00
2019-01-16 11:32:39 +00:00
fn create_context < P : IsA < GLContext > > ( & self , other_context : & P ) -> Result < GLContext , Error > ;
2018-11-27 21:52:42 +00:00
fn create_window ( & self ) -> Option < GLWindow > ;
fn filter_gl_api ( & self , gl_api : GLAPI ) ;
fn get_gl_api ( & self ) -> GLAPI ;
fn get_gl_api_unlocked ( & self ) -> GLAPI ;
fn get_handle_type ( & self ) -> GLDisplayType ;
2019-01-16 11:32:39 +00:00
fn remove_window < P : IsA < GLWindow > > ( & self , window : & P ) -> Result < ( ) , glib ::error ::BoolError > ;
2018-11-27 21:52:42 +00:00
fn connect_create_context < F : Fn ( & Self , & GLContext ) -> GLContext + Send + Sync + 'static > ( & self , f : F ) -> SignalHandlerId ;
}
2018-12-08 09:05:20 +00:00
impl < O : IsA < GLDisplay > > GLDisplayExt for O {
2019-01-16 11:32:39 +00:00
fn add_context < P : IsA < GLContext > > ( & self , context : & P ) -> Result < ( ) , glib ::error ::BoolError > {
2018-11-27 21:52:42 +00:00
unsafe {
2019-01-16 11:32:39 +00:00
glib_result_from_gboolean! ( ffi ::gst_gl_display_add_context ( self . as_ref ( ) . to_glib_none ( ) . 0 , context . as_ref ( ) . to_glib_none ( ) . 0 ) , " Failed to add OpenGL context " )
2018-11-27 21:52:42 +00:00
}
}
2019-01-16 11:32:39 +00:00
fn create_context < P : IsA < GLContext > > ( & self , other_context : & P ) -> Result < GLContext , Error > {
2018-11-27 21:52:42 +00:00
unsafe {
let mut p_context = ptr ::null_mut ( ) ;
let mut error = ptr ::null_mut ( ) ;
2019-01-16 11:32:39 +00:00
let _ = ffi ::gst_gl_display_create_context ( self . as_ref ( ) . to_glib_none ( ) . 0 , other_context . as_ref ( ) . to_glib_none ( ) . 0 , & mut p_context , & mut error ) ;
2018-11-27 21:52:42 +00:00
if error . is_null ( ) { Ok ( from_glib_full ( p_context ) ) } else { Err ( from_glib_full ( error ) ) }
}
}
fn create_window ( & self ) -> Option < GLWindow > {
unsafe {
2019-01-16 11:32:39 +00:00
from_glib_full ( ffi ::gst_gl_display_create_window ( self . as_ref ( ) . to_glib_none ( ) . 0 ) )
2018-11-27 21:52:42 +00:00
}
}
fn filter_gl_api ( & self , gl_api : GLAPI ) {
unsafe {
2019-01-16 11:32:39 +00:00
ffi ::gst_gl_display_filter_gl_api ( self . as_ref ( ) . to_glib_none ( ) . 0 , gl_api . to_glib ( ) ) ;
2018-11-27 21:52:42 +00:00
}
}
fn get_gl_api ( & self ) -> GLAPI {
unsafe {
2019-01-16 11:32:39 +00:00
from_glib ( ffi ::gst_gl_display_get_gl_api ( self . as_ref ( ) . to_glib_none ( ) . 0 ) )
2018-11-27 21:52:42 +00:00
}
}
fn get_gl_api_unlocked ( & self ) -> GLAPI {
unsafe {
2019-01-16 11:32:39 +00:00
from_glib ( ffi ::gst_gl_display_get_gl_api_unlocked ( self . as_ref ( ) . to_glib_none ( ) . 0 ) )
2018-11-27 21:52:42 +00:00
}
}
fn get_handle_type ( & self ) -> GLDisplayType {
unsafe {
2019-01-16 11:32:39 +00:00
from_glib ( ffi ::gst_gl_display_get_handle_type ( self . as_ref ( ) . to_glib_none ( ) . 0 ) )
2018-11-27 21:52:42 +00:00
}
}
2019-01-16 11:32:39 +00:00
fn remove_window < P : IsA < GLWindow > > ( & self , window : & P ) -> Result < ( ) , glib ::error ::BoolError > {
2018-11-27 21:52:42 +00:00
unsafe {
2019-01-16 11:32:39 +00:00
glib_result_from_gboolean! ( ffi ::gst_gl_display_remove_window ( self . as_ref ( ) . to_glib_none ( ) . 0 , window . as_ref ( ) . to_glib_none ( ) . 0 ) , " Failed to remove window " )
2018-11-27 21:52:42 +00:00
}
}
fn connect_create_context < F : Fn ( & Self , & GLContext ) -> GLContext + Send + Sync + 'static > ( & self , f : F ) -> SignalHandlerId {
unsafe {
2019-01-29 13:53:44 +00:00
let f : Box_ < F > = Box_ ::new ( f ) ;
2019-01-16 11:32:39 +00:00
connect_raw ( self . as_ptr ( ) as * mut _ , b " create-context \0 " . as_ptr ( ) as * const _ ,
2019-01-29 13:53:44 +00:00
Some ( transmute ( create_context_trampoline ::< Self , F > as usize ) ) , Box_ ::into_raw ( f ) )
2018-11-27 21:52:42 +00:00
}
}
}
2019-01-29 13:53:44 +00:00
unsafe extern " C " fn create_context_trampoline < P , F : Fn ( & P , & GLContext ) -> GLContext + Send + Sync + 'static > ( this : * mut ffi ::GstGLDisplay , context : * mut ffi ::GstGLContext , f : glib_ffi ::gpointer ) -> * mut ffi ::GstGLContext
2018-11-27 21:52:42 +00:00
where P : IsA < GLDisplay > {
2019-01-29 13:53:44 +00:00
let f : & F = transmute ( f ) ;
2019-01-16 11:32:39 +00:00
f ( & GLDisplay ::from_glib_borrow ( this ) . unsafe_cast ( ) , & from_glib_borrow ( context ) ) . to_glib_full ( )
2018-11-27 21:52:42 +00:00
}