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}