skia_safe/gpu/ganesh/vk/
backend_drawable_info.rs1use 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}