1#![allow(unused_imports)]
2#![allow(clippy::missing_safety_doc)]
3use core::ptr::NonNull;
4
5use crate::*;
6
7#[allow(dead_code)]
8fn slice_to_ptr_count<T>(slice: &[T]) -> (NonNull<T>, usize) {
9 let ptr: *const T = slice.as_ptr();
10 let ptr: *mut T = ptr as *mut T;
11 let ptr = unsafe { NonNull::new_unchecked(ptr) };
13 (ptr, slice.len())
14}
15
16#[cfg(all(feature = "MTLRenderCommandEncoder", feature = "MTLCommandEncoder"))]
17pub trait MTLRenderCommandEncoderSliceExt: MTLRenderCommandEncoder + objc2::Message {
18 unsafe fn setViewports(&self, viewports: &[MTLViewport]);
20}
21
22#[cfg(all(feature = "MTLRenderCommandEncoder", feature = "MTLCommandEncoder"))]
23impl<P: MTLRenderCommandEncoder + objc2::Message> MTLRenderCommandEncoderSliceExt for P {
24 unsafe fn setViewports(&self, viewports: &[MTLViewport]) {
25 let (ptr, count) = slice_to_ptr_count(viewports);
26 unsafe { self.setViewports_count(ptr, count) }
27 }
28}
29
30