gstreamer_vulkan/
vulkan_device.rs

1use crate::VulkanDevice;
2
3use glib::prelude::*;
4use glib::translate::*;
5
6mod sealed {
7    pub trait Sealed {}
8    impl<T: super::IsA<super::VulkanDevice>> Sealed for T {}
9}
10
11pub trait VulkanDeviceExtManual: sealed::Sealed + IsA<VulkanDevice> + 'static {
12    fn create_shader(&self, code: &[u8]) -> Result<crate::VulkanHandle, glib::Error> {
13        unsafe {
14            let mut error = std::ptr::null_mut();
15            let shader = crate::ffi::gst_vulkan_create_shader(
16                self.as_ref().to_glib_none().0,
17                code.as_ptr() as *const i8,
18                code.len(),
19                &mut error,
20            );
21            debug_assert_eq!(shader.is_null(), !error.is_null());
22            if error.is_null() {
23                Ok(crate::VulkanHandle::from_glib_full(shader))
24            } else {
25                Err(from_glib_full(error))
26            }
27        }
28    }
29}
30impl<O: IsA<VulkanDevice>> VulkanDeviceExtManual for O {}