iron_oxide/encoder/
pass.rs1use 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}