iron_oxide/encoder/
pass.rs

1use crate::import_objc_macros::*;
2use crate::{handle, Array, MTLTexture, NSUInteger, Object, ObjectPointer};
3
4#[repr(u64)]
5pub enum MTLLoadAction {
6    DontCare = 0,
7    Load = 1,
8    Clear = 2,
9}
10
11#[repr(u64)]
12pub enum MTLStoreAction {
13    DontCare = 0,
14    Store = 1,
15    MultisampleResolve = 2,
16    StoreAndMultisampleResolve = 3,
17    Unknown = 4,
18    CustomSampleDepthStore = 5,
19}
20
21#[repr(u64)]
22pub enum MTLStoreActionOptions {
23    None = 0,
24    CustomSamplePositions = 1,
25}
26
27pub trait MTLRenderPassAttachmentDescriptor: Object {
28    unsafe fn set_texture(&self, texture: &MTLTexture) {
29        msg_send![self.get_ptr(), setTexture:texture.get_ptr()]
30    }
31    unsafe fn set_level(&self, level: NSUInteger) {
32        msg_send![self.get_ptr(), setLevel: level]
33    }
34    unsafe fn set_slice(&self, slice: NSUInteger) {
35        msg_send![self.get_ptr(), setSlice: slice]
36    }
37    unsafe fn set_depth_plane(&self, plane: NSUInteger) {
38        msg_send![self.get_ptr(), setDepthPlane: plane]
39    }
40    unsafe fn set_load_action(&self, action: MTLLoadAction) {
41        msg_send![self.get_ptr(), setLoadAction: action]
42    }
43    unsafe fn set_store_action(&self, action: MTLStoreAction) {
44        msg_send![self.get_ptr(), setStoreAction: action]
45    }
46    unsafe fn set_store_action_options(&self, options: MTLStoreActionOptions) {
47        msg_send![self.get_ptr(), setStoreActionOptions: options]
48    }
49    unsafe fn set_resolve_texture(&self, texture: &MTLTexture) {
50        msg_send![self.get_ptr(), setResolveTexture:texture.get_ptr()]
51    }
52    unsafe fn set_resolve_level(&self, level: NSUInteger) {
53        msg_send![self.get_ptr(), setResolveLevel: level]
54    }
55    unsafe fn set_resolve_slice(&self, slice: NSUInteger) {
56        msg_send![self.get_ptr(), setResolveSlice: slice]
57    }
58    unsafe fn set_resolve_depth_plane(&self, plane: NSUInteger) {
59        msg_send![self.get_ptr(), setResolveDepthPlane: plane]
60    }
61}
62
63#[repr(C)]
64pub struct MTLClearColor {
65    pub r: f64,
66    pub g: f64,
67    pub b: f64,
68    pub a: f64,
69}
70
71pub struct MTLRenderPassColorAttachmentDescriptor(ObjectPointer);
72handle!(MTLRenderPassColorAttachmentDescriptor);
73
74impl MTLRenderPassColorAttachmentDescriptor {
75    pub unsafe fn new() -> MTLRenderPassColorAttachmentDescriptor {
76        MTLRenderPassColorAttachmentDescriptor::from_ptr(msg_send![
77            class!(MTLRenderPassColorAttachmentDescriptor),
78            new
79        ])
80    }
81    pub unsafe fn set_clear_color(&self, color: MTLClearColor) {
82        msg_send![self.get_ptr(), setClearColor: color]
83    }
84}
85
86impl MTLRenderPassAttachmentDescriptor for MTLRenderPassColorAttachmentDescriptor {}
87
88impl Object for MTLRenderPassColorAttachmentDescriptor {
89    unsafe fn from_ptr(ptr: ObjectPointer) -> Self
90    where
91        Self: Sized,
92    {
93        MTLRenderPassColorAttachmentDescriptor(ptr)
94    }
95
96    fn get_ptr(&self) -> ObjectPointer {
97        self.0
98    }
99}
100
101pub struct MTLRenderPassColorAttachmentDescriptorArray(ObjectPointer);
102handle!(MTLRenderPassColorAttachmentDescriptorArray);
103
104impl Array<MTLRenderPassColorAttachmentDescriptor> for MTLRenderPassColorAttachmentDescriptorArray {}
105
106impl Object for MTLRenderPassColorAttachmentDescriptorArray {
107    unsafe fn from_ptr(ptr: ObjectPointer) -> Self
108    where
109        Self: Sized,
110    {
111        MTLRenderPassColorAttachmentDescriptorArray(ptr)
112    }
113
114    fn get_ptr(&self) -> ObjectPointer {
115        self.0
116    }
117}
118
119#[repr(u64)]
120pub enum MTLMultisampleDepthResolveFilter {
121    Sample0 = 0,
122    FilterMin = 1,
123    FilterMax = 2,
124}
125
126pub struct MTLRenderPassDepthAttachmentDescriptor(ObjectPointer);
127handle!(MTLRenderPassDepthAttachmentDescriptor);
128
129impl MTLRenderPassDepthAttachmentDescriptor {
130    pub unsafe fn set_clear_depth(&self, depth: f64) {
131        msg_send![self.get_ptr(), setClearDepth: depth]
132    }
133    pub unsafe fn set_depth_resolve_filter(&self, filter: MTLMultisampleDepthResolveFilter) {
134        msg_send![self.get_ptr(), setDepthResolveFilter: filter]
135    }
136}
137
138impl MTLRenderPassAttachmentDescriptor for MTLRenderPassDepthAttachmentDescriptor {}
139
140impl Object for MTLRenderPassDepthAttachmentDescriptor {
141    unsafe fn from_ptr(ptr: ObjectPointer) -> Self
142    where
143        Self: Sized,
144    {
145        MTLRenderPassDepthAttachmentDescriptor(ptr)
146    }
147
148    fn get_ptr(&self) -> ObjectPointer {
149        self.0
150    }
151}
152
153#[repr(u64)]
154pub enum MTLMultisampleStencilResolveFilter {
155    Sample0 = 0,
156    ResolvedSample = 1,
157}
158
159pub struct MTLRenderPassStencilAttachmentDescriptor(ObjectPointer);
160handle!(MTLRenderPassStencilAttachmentDescriptor);
161
162impl MTLRenderPassStencilAttachmentDescriptor {
163    pub unsafe fn set_clear_stencil(&self, clear: u32) {
164        msg_send![self.get_ptr(), setClearStencil: clear]
165    }
166    pub unsafe fn set_stencil_resolve_filter(&self, filter: MTLMultisampleStencilResolveFilter) {
167        msg_send![self.get_ptr(), setStencilResolveFilter: filter]
168    }
169}
170
171impl MTLRenderPassAttachmentDescriptor for MTLRenderPassStencilAttachmentDescriptor {}
172
173impl Object for MTLRenderPassStencilAttachmentDescriptor {
174    unsafe fn from_ptr(ptr: ObjectPointer) -> Self
175    where
176        Self: Sized,
177    {
178        MTLRenderPassStencilAttachmentDescriptor(ptr)
179    }
180
181    fn get_ptr(&self) -> ObjectPointer {
182        self.0
183    }
184}
185
186pub struct MTLRenderPassDescriptor(ObjectPointer);
187handle!(MTLRenderPassDescriptor);
188
189impl MTLRenderPassDescriptor {
190    pub unsafe fn new() -> MTLRenderPassDescriptor {
191        MTLRenderPassDescriptor::from_ptr({
192            let k = ObjectPointer(msg_send![
193                class!(MTLRenderPassDescriptor),
194                renderPassDescriptor
195            ]);
196            msg_send![k, retain]
197        })
198    }
199    pub unsafe fn get_color_attachments(&self) -> MTLRenderPassColorAttachmentDescriptorArray {
200        MTLRenderPassColorAttachmentDescriptorArray::from_ptr({
201            let k = ObjectPointer(msg_send![self.get_ptr(), colorAttachments]);
202            msg_send![k, retain]
203        })
204    }
205    pub unsafe fn get_depth_attachment(&self) -> MTLRenderPassDepthAttachmentDescriptor {
206        MTLRenderPassDepthAttachmentDescriptor::from_ptr({
207            let k = ObjectPointer(msg_send![self.get_ptr(), depthAttachment]);
208            msg_send![k, retain]
209        })
210    }
211    pub unsafe fn get_stencil_attachment(&self) -> MTLRenderPassStencilAttachmentDescriptor {
212        MTLRenderPassStencilAttachmentDescriptor::from_ptr({
213            let k = ObjectPointer(msg_send![self.get_ptr(), stencilAttachment]);
214            msg_send![k, retain]
215        })
216    }
217}
218
219impl Object for MTLRenderPassDescriptor {
220    unsafe fn from_ptr(ptr: ObjectPointer) -> Self
221    where
222        Self: Sized,
223    {
224        MTLRenderPassDescriptor(ptr)
225    }
226
227    fn get_ptr(&self) -> ObjectPointer {
228        self.0
229    }
230}