iron_oxide/
drawable.rs

1use crate::import_objc_macros::*;
2use crate::{handle, MTLTexture, NSUInteger, Object, ObjectPointer};
3
4pub trait MTLDrawable: Object {
5    unsafe fn get_id(&self) -> NSUInteger {
6        msg_send![self.get_ptr(), drawableID]
7    }
8    unsafe fn present(&self) {
9        msg_send![self.get_ptr(), present]
10    }
11    unsafe fn present_after_minimum_duration(&self, duration: f64) {
12        msg_send![self.get_ptr(), presentAfterMinimumDuration: duration]
13    }
14    unsafe fn present_at_time(&self, time: f64) {
15        msg_send![self.get_ptr(), presentAtTime: time]
16    }
17    unsafe fn get_presented_time(&self) -> f64 {
18        msg_send![self.get_ptr(), presentedTime]
19    }
20}
21
22pub struct CAMetalDrawable(ObjectPointer);
23handle!(CAMetalDrawable);
24
25impl CAMetalDrawable {
26    pub unsafe fn get_texture(&self) -> MTLTexture {
27        MTLTexture::from_ptr({
28            let k = ObjectPointer(msg_send![self.get_ptr(), texture]);
29            msg_send![k, retain]
30        })
31    }
32}
33
34impl MTLDrawable for CAMetalDrawable {}
35
36impl Object for CAMetalDrawable {
37    unsafe fn from_ptr(ptr: ObjectPointer) -> Self
38    where
39        Self: Sized,
40    {
41        CAMetalDrawable(ptr)
42    }
43
44    fn get_ptr(&self) -> ObjectPointer {
45        self.0
46    }
47}