gstreamer_gl/
gl_framebuffer.rs1use glib::{prelude::*, translate::*};
2
3use crate::{ffi, GLFramebuffer, GLMemoryRef};
4
5pub trait GLFramebufferExtManual: IsA<GLFramebuffer> + 'static {
6 #[doc(alias = "gst_gl_framebuffer_draw_to_texture")]
7 fn draw_to_texture<F: FnOnce()>(&self, mem: &mut GLMemoryRef, func: F) {
8 let mut func = std::mem::ManuallyDrop::new(func);
9 let user_data: *mut F = &mut *func;
10
11 unsafe extern "C" fn trampoline<F: FnOnce()>(
12 data: glib::ffi::gpointer,
13 ) -> glib::ffi::gboolean {
14 let func = std::ptr::read(data as *mut F);
15 func();
16 glib::ffi::GTRUE
17 }
18
19 unsafe {
20 ffi::gst_gl_framebuffer_draw_to_texture(
21 self.as_ref().to_glib_none().0,
22 mem.as_mut_ptr(),
23 Some(trampoline::<F>),
24 user_data as glib::ffi::gpointer,
25 );
26 }
27 }
28}
29
30impl<O: IsA<GLFramebuffer>> GLFramebufferExtManual for O {}