skia_safe/gpu/ganesh/vk/
backend_drawable_info.rs

1use std::fmt;
2
3use skia_bindings::{self as sb, GrBackendDrawableInfo};
4
5use crate::{
6    gpu::{vk, BackendAPI},
7    prelude::*,
8};
9
10pub type BackendDrawableInfo = Handle<GrBackendDrawableInfo>;
11unsafe_send_sync!(BackendDrawableInfo);
12
13impl NativeDrop for GrBackendDrawableInfo {
14    fn drop(&mut self) {
15        unsafe { sb::C_GrBackendDrawableInfo_destruct(self) }
16    }
17}
18
19impl fmt::Debug for BackendDrawableInfo {
20    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
21        let mut d = f.debug_struct("BackendDrawableInfo");
22        d.field("is_valid", &self.is_valid());
23        d.field("backend", &self.backend());
24        #[cfg(feature = "vulkan")]
25        d.field("vk_drawable_info", &self.get_vk_drawable_info());
26        d.finish()
27    }
28}
29
30impl BackendDrawableInfo {
31    pub fn new() -> Self {
32        Self::construct(|di| unsafe { sb::C_GrBackendDrawableInfo_Construct(di) })
33    }
34
35    #[cfg(feature = "vulkan")]
36    pub fn from_vk(info: &vk::DrawableInfo) -> Self {
37        Self::construct(|di| unsafe { sb::C_GrBackendDrawableInfo_Construct2(di, info.native()) })
38    }
39
40    pub fn is_valid(&self) -> bool {
41        unsafe { sb::C_GrBackendDrawableInfo_isValid(self.native()) }
42    }
43
44    pub fn backend(&self) -> BackendAPI {
45        unsafe { sb::C_GrBackendDrawableInfo_backend(self.native()) }
46    }
47
48    #[cfg(feature = "vulkan")]
49    pub fn get_vk_drawable_info(&self) -> Option<vk::DrawableInfo> {
50        unsafe {
51            let mut di = vk::DrawableInfo::default();
52            sb::C_GrBackendDrawableInfo_getVkDrawableInfo(self.native(), di.native_mut())
53                .if_true_some(di)
54        }
55    }
56}