1use super::*;
9
10#[repr(u64)]
12#[derive(Copy, Clone, Debug)]
13pub enum MTLLoadAction {
14 DontCare = 0,
15 Load = 1,
16 Clear = 2,
17}
18
19#[repr(u64)]
21#[derive(Copy, Clone, Debug)]
22pub enum MTLStoreAction {
23 DontCare = 0,
24 Store = 1,
25 MultisampleResolve = 2,
26 StoreAndMultisampleResolve = 3,
27 Unknown = 4,
28 CustomSampleDepthStore = 5,
29}
30
31#[repr(C)]
33#[derive(Copy, Clone, Debug)]
34pub struct MTLClearColor {
35 pub red: f64,
36 pub green: f64,
37 pub blue: f64,
38 pub alpha: f64,
39}
40
41impl MTLClearColor {
42 #[inline]
43 pub fn new(red: f64, green: f64, blue: f64, alpha: f64) -> Self {
44 Self {
45 red,
46 green,
47 blue,
48 alpha,
49 }
50 }
51}
52
53#[repr(u32)]
55#[allow(non_camel_case_types)]
56pub enum MTLMultisampleStencilResolveFilter {
57 Sample0 = 0,
58 DepthResolvedSample = 1,
59}
60
61pub enum MTLRenderPassAttachmentDescriptor {}
63
64foreign_obj_type! {
65 type CType = MTLRenderPassAttachmentDescriptor;
66 pub struct RenderPassAttachmentDescriptor;
67}
68
69impl RenderPassAttachmentDescriptorRef {
70 pub fn texture(&self) -> Option<&TextureRef> {
71 unsafe { msg_send![self, texture] }
72 }
73
74 pub fn set_texture(&self, texture: Option<&TextureRef>) {
75 unsafe { msg_send![self, setTexture: texture] }
76 }
77
78 pub fn level(&self) -> NSUInteger {
79 unsafe { msg_send![self, level] }
80 }
81
82 pub fn set_level(&self, level: NSUInteger) {
83 unsafe { msg_send![self, setLevel: level] }
84 }
85
86 pub fn slice(&self) -> NSUInteger {
87 unsafe { msg_send![self, slice] }
88 }
89
90 pub fn set_slice(&self, slice: NSUInteger) {
91 unsafe { msg_send![self, setSlice: slice] }
92 }
93
94 pub fn depth_plane(&self) -> NSUInteger {
95 unsafe { msg_send![self, depthPlane] }
96 }
97
98 pub fn set_depth_plane(&self, depth_plane: NSUInteger) {
99 unsafe { msg_send![self, setDepthPlane: depth_plane] }
100 }
101
102 pub fn resolve_texture(&self) -> Option<&TextureRef> {
103 unsafe { msg_send![self, resolveTexture] }
104 }
105
106 pub fn set_resolve_texture(&self, resolve_texture: Option<&TextureRef>) {
107 unsafe { msg_send![self, setResolveTexture: resolve_texture] }
108 }
109
110 pub fn resolve_level(&self) -> NSUInteger {
111 unsafe { msg_send![self, resolveLevel] }
112 }
113
114 pub fn set_resolve_level(&self, resolve_level: NSUInteger) {
115 unsafe { msg_send![self, setResolveLevel: resolve_level] }
116 }
117
118 pub fn resolve_slice(&self) -> NSUInteger {
119 unsafe { msg_send![self, resolveSlice] }
120 }
121
122 pub fn set_resolve_slice(&self, resolve_slice: NSUInteger) {
123 unsafe { msg_send![self, setResolveSlice: resolve_slice] }
124 }
125
126 pub fn resolve_depth_plane(&self) -> NSUInteger {
127 unsafe { msg_send![self, resolveDepthPlane] }
128 }
129
130 pub fn set_resolve_depth_plane(&self, resolve_depth_plane: NSUInteger) {
131 unsafe { msg_send![self, setResolveDepthPlane: resolve_depth_plane] }
132 }
133
134 pub fn load_action(&self) -> MTLLoadAction {
135 unsafe { msg_send![self, loadAction] }
136 }
137
138 pub fn set_load_action(&self, load_action: MTLLoadAction) {
139 unsafe { msg_send![self, setLoadAction: load_action] }
140 }
141
142 pub fn store_action(&self) -> MTLStoreAction {
143 unsafe { msg_send![self, storeAction] }
144 }
145
146 pub fn set_store_action(&self, store_action: MTLStoreAction) {
147 unsafe { msg_send![self, setStoreAction: store_action] }
148 }
149}
150
151pub enum MTLRenderPassColorAttachmentDescriptor {}
153
154foreign_obj_type! {
155 type CType = MTLRenderPassColorAttachmentDescriptor;
156 pub struct RenderPassColorAttachmentDescriptor;
157 type ParentType = RenderPassAttachmentDescriptor;
158}
159
160impl RenderPassColorAttachmentDescriptor {
161 pub fn new() -> Self {
162 unsafe {
163 let class = class!(MTLRenderPassColorAttachmentDescriptor);
164 msg_send![class, new]
165 }
166 }
167}
168
169impl RenderPassColorAttachmentDescriptorRef {
170 pub fn clear_color(&self) -> MTLClearColor {
171 unsafe { msg_send![self, clearColor] }
172 }
173
174 pub fn set_clear_color(&self, clear_color: MTLClearColor) {
175 unsafe { msg_send![self, setClearColor: clear_color] }
176 }
177}
178
179pub enum MTLRenderPassDepthAttachmentDescriptor {}
181
182foreign_obj_type! {
183 type CType = MTLRenderPassDepthAttachmentDescriptor;
184 pub struct RenderPassDepthAttachmentDescriptor;
185 type ParentType = RenderPassAttachmentDescriptor;
186}
187
188impl RenderPassDepthAttachmentDescriptorRef {
189 pub fn clear_depth(&self) -> f64 {
190 unsafe { msg_send![self, clearDepth] }
191 }
192
193 pub fn set_clear_depth(&self, clear_depth: f64) {
194 unsafe { msg_send![self, setClearDepth: clear_depth] }
195 }
196}
197
198pub enum MTLRenderPassStencilAttachmentDescriptor {}
200
201foreign_obj_type! {
202 type CType = MTLRenderPassStencilAttachmentDescriptor;
203 pub struct RenderPassStencilAttachmentDescriptor;
204 type ParentType = RenderPassAttachmentDescriptor;
205}
206
207impl RenderPassStencilAttachmentDescriptorRef {
208 pub fn clear_stencil(&self) -> u32 {
209 unsafe { msg_send![self, clearStencil] }
210 }
211
212 pub fn set_clear_stencil(&self, clear_stencil: u32) {
213 unsafe { msg_send![self, setClearStencil: clear_stencil] }
214 }
215
216 pub fn stencil_resolve_filter(&self) -> MTLMultisampleStencilResolveFilter {
217 unsafe { msg_send![self, stencilResolveFilter] }
218 }
219
220 pub fn set_stencil_resolve_filter(
221 &self,
222 stencil_resolve_filter: MTLMultisampleStencilResolveFilter,
223 ) {
224 unsafe { msg_send![self, setStencilResolveFilter: stencil_resolve_filter] }
225 }
226}
227
228pub enum MTLRenderPassColorAttachmentDescriptorArray {}
230
231foreign_obj_type! {
232 type CType = MTLRenderPassColorAttachmentDescriptorArray;
233 pub struct RenderPassColorAttachmentDescriptorArray;
234}
235
236impl RenderPassColorAttachmentDescriptorArrayRef {
237 pub fn object_at(&self, index: NSUInteger) -> Option<&RenderPassColorAttachmentDescriptorRef> {
238 unsafe { msg_send![self, objectAtIndexedSubscript: index] }
239 }
240
241 pub fn set_object_at(
242 &self,
243 index: NSUInteger,
244 attachment: Option<&RenderPassColorAttachmentDescriptorRef>,
245 ) {
246 unsafe {
247 msg_send![self, setObject:attachment
248 atIndexedSubscript:index]
249 }
250 }
251}
252
253pub enum MTLRenderPassSampleBufferAttachmentDescriptor {}
255
256foreign_obj_type! {
257 type CType = MTLRenderPassSampleBufferAttachmentDescriptor;
258 pub struct RenderPassSampleBufferAttachmentDescriptor;
259}
260
261impl RenderPassSampleBufferAttachmentDescriptor {
262 pub fn new() -> Self {
263 let class = class!(MTLRenderPassSampleBufferAttachmentDescriptor);
264 unsafe { msg_send![class, new] }
265 }
266}
267
268impl RenderPassSampleBufferAttachmentDescriptorRef {
269 pub fn sample_buffer(&self) -> Option<&CounterSampleBufferRef> {
270 unsafe { msg_send![self, sampleBuffer] }
271 }
272
273 pub fn set_sample_buffer(&self, sample_buffer: &CounterSampleBufferRef) {
274 unsafe { msg_send![self, setSampleBuffer: sample_buffer] }
275 }
276
277 pub fn start_of_vertex_sample_index(&self) -> NSUInteger {
278 unsafe { msg_send![self, startOfVertexSampleIndex] }
279 }
280
281 pub fn set_start_of_vertex_sample_index(&self, start_of_vertex_sample_index: NSUInteger) {
282 unsafe {
283 msg_send![
284 self,
285 setStartOfVertexSampleIndex: start_of_vertex_sample_index
286 ]
287 }
288 }
289
290 pub fn end_of_vertex_sample_index(&self) -> NSUInteger {
291 unsafe { msg_send![self, endOfVertexSampleIndex] }
292 }
293
294 pub fn set_end_of_vertex_sample_index(&self, end_of_vertex_sample_index: NSUInteger) {
295 unsafe { msg_send![self, setEndOfVertexSampleIndex: end_of_vertex_sample_index] }
296 }
297
298 pub fn start_of_fragment_sample_index(&self) -> NSUInteger {
299 unsafe { msg_send![self, startOfFragmentSampleIndex] }
300 }
301
302 pub fn set_start_of_fragment_sample_index(&self, start_of_fragment_sample_index: NSUInteger) {
303 unsafe {
304 msg_send![
305 self,
306 setStartOfFragmentSampleIndex: start_of_fragment_sample_index
307 ]
308 }
309 }
310
311 pub fn end_of_fragment_sample_index(&self) -> NSUInteger {
312 unsafe { msg_send![self, endOfFragmentSampleIndex] }
313 }
314
315 pub fn set_end_of_fragment_sample_index(&self, end_of_fragment_sample_index: NSUInteger) {
316 unsafe {
317 msg_send![
318 self,
319 setEndOfFragmentSampleIndex: end_of_fragment_sample_index
320 ]
321 }
322 }
323}
324
325pub enum MTLRenderPassSampleBufferAttachmentDescriptorArray {}
327
328foreign_obj_type! {
329 type CType = MTLRenderPassSampleBufferAttachmentDescriptorArray;
330 pub struct RenderPassSampleBufferAttachmentDescriptorArray;
331}
332
333impl RenderPassSampleBufferAttachmentDescriptorArrayRef {
334 pub fn object_at(
335 &self,
336 index: NSUInteger,
337 ) -> Option<&RenderPassSampleBufferAttachmentDescriptorRef> {
338 unsafe { msg_send![self, objectAtIndexedSubscript: index] }
339 }
340
341 pub fn set_object_at(
342 &self,
343 index: NSUInteger,
344 attachment: Option<&RenderPassSampleBufferAttachmentDescriptorRef>,
345 ) {
346 unsafe {
347 msg_send![self, setObject:attachment
348 atIndexedSubscript:index]
349 }
350 }
351}
352
353pub enum MTLRenderPassDescriptor {}
360
361foreign_obj_type! {
362 type CType = MTLRenderPassDescriptor;
363 pub struct RenderPassDescriptor;
364}
365
366impl RenderPassDescriptor {
367 pub fn new<'a>() -> &'a RenderPassDescriptorRef {
369 unsafe { msg_send![class!(MTLRenderPassDescriptor), renderPassDescriptor] }
370 }
371}
372
373impl RenderPassDescriptorRef {
374 pub fn color_attachments(&self) -> &RenderPassColorAttachmentDescriptorArrayRef {
375 unsafe { msg_send![self, colorAttachments] }
376 }
377
378 pub fn depth_attachment(&self) -> Option<&RenderPassDepthAttachmentDescriptorRef> {
379 unsafe { msg_send![self, depthAttachment] }
380 }
381
382 pub fn set_depth_attachment(
383 &self,
384 depth_attachment: Option<&RenderPassDepthAttachmentDescriptorRef>,
385 ) {
386 unsafe { msg_send![self, setDepthAttachment: depth_attachment] }
387 }
388
389 pub fn stencil_attachment(&self) -> Option<&RenderPassStencilAttachmentDescriptorRef> {
390 unsafe { msg_send![self, stencilAttachment] }
391 }
392
393 pub fn set_stencil_attachment(
394 &self,
395 stencil_attachment: Option<&RenderPassStencilAttachmentDescriptorRef>,
396 ) {
397 unsafe { msg_send![self, setStencilAttachment: stencil_attachment] }
398 }
399
400 pub fn visibility_result_buffer(&self) -> Option<&BufferRef> {
401 unsafe { msg_send![self, visibilityResultBuffer] }
402 }
403
404 pub fn set_visibility_result_buffer(&self, buffer: Option<&BufferRef>) {
405 unsafe { msg_send![self, setVisibilityResultBuffer: buffer] }
406 }
407
408 pub fn render_target_array_length(&self) -> NSUInteger {
409 unsafe { msg_send![self, renderTargetArrayLength] }
410 }
411
412 pub fn set_render_target_array_length(&self, length: NSUInteger) {
413 unsafe { msg_send![self, setRenderTargetArrayLength: length] }
414 }
415
416 pub fn render_target_width(&self) -> NSUInteger {
417 unsafe { msg_send![self, renderTargetWidth] }
418 }
419
420 pub fn set_render_target_width(&self, size: NSUInteger) {
421 unsafe { msg_send![self, setRenderTargetWidth: size] }
422 }
423
424 pub fn render_target_height(&self) -> NSUInteger {
425 unsafe { msg_send![self, renderTargetHeight] }
426 }
427
428 pub fn set_render_target_height(&self, size: NSUInteger) {
429 unsafe { msg_send![self, setRenderTargetHeight: size] }
430 }
431
432 pub fn default_raster_sample_count(&self) -> NSUInteger {
433 unsafe { msg_send![self, defaultRasterSampleCount] }
434 }
435
436 pub fn set_default_raster_sample_count(&self, count: NSUInteger) {
437 unsafe { msg_send![self, setDefaultRasterSampleCount: count] }
438 }
439
440 pub fn sample_buffer_attachments(&self) -> &RenderPassSampleBufferAttachmentDescriptorArrayRef {
441 unsafe { msg_send![self, sampleBufferAttachments] }
442 }
443}