|
| 1 | +use std::ptr::{self, NonNull}; |
| 2 | + |
1 | 3 | #[cfg(feature = "detour")]
|
2 | 4 | use recast_sys::ffi::detour::NavMeshCreateParams;
|
3 | 5 |
|
| 6 | +use crate::{slice_from_raw_parts_mut_or_dangling, slice_from_raw_parts_or_dangling}; |
| 7 | + |
4 | 8 | use super::PolyMesh;
|
5 | 9 |
|
6 | 10 | impl PolyMesh {
|
7 | 11 | pub fn vertices(&self) -> &[u16] {
|
8 | 12 | let vertices_buffer = recast_sys::ffi::recast::poly_mesh_get_vertices(self.as_ref());
|
9 | 13 | let n_vertices = recast_sys::ffi::recast::poly_mesh_get_vertex_count(self.as_ref());
|
10 |
| - unsafe { std::slice::from_raw_parts(vertices_buffer, (n_vertices * 3) as usize) } |
| 14 | + slice_from_raw_parts_or_dangling(vertices_buffer, (n_vertices * 3) as usize) |
11 | 15 | }
|
12 | 16 |
|
13 | 17 | pub fn polygons(&self) -> &[u16] {
|
14 | 18 | let polygons_buffer = recast_sys::ffi::recast::poly_mesh_get_polys(self.as_ref());
|
15 | 19 | let n_polys = recast_sys::ffi::recast::poly_mesh_get_poly_count(self.as_ref());
|
16 | 20 | let n_vpp = recast_sys::ffi::recast::poly_mesh_max_vertex_count_per_poly(self.as_ref());
|
17 |
| - unsafe { std::slice::from_raw_parts(polygons_buffer, (n_polys * 2 * n_vpp) as usize) } |
| 21 | + slice_from_raw_parts_or_dangling(polygons_buffer, (n_polys * 2 * n_vpp) as usize) |
18 | 22 | }
|
19 | 23 |
|
20 | 24 | pub fn regions(&self) -> &[u16] {
|
21 | 25 | let regions_buffer = recast_sys::ffi::recast::poly_mesh_get_regions(self.as_ref());
|
22 | 26 | let n_polys = recast_sys::ffi::recast::poly_mesh_get_poly_count(self.as_ref());
|
23 |
| - unsafe { std::slice::from_raw_parts(regions_buffer, n_polys as usize) } |
| 27 | + slice_from_raw_parts_or_dangling(regions_buffer, n_polys as usize) |
24 | 28 | }
|
25 | 29 |
|
26 | 30 | pub fn flags(&self) -> &[u16] {
|
27 | 31 | let flags_buffer = recast_sys::ffi::recast::poly_mesh_get_flags(self.as_ref());
|
28 | 32 | let n_polys = recast_sys::ffi::recast::poly_mesh_get_poly_count(self.as_ref());
|
29 |
| - unsafe { std::slice::from_raw_parts(flags_buffer, n_polys as usize) } |
| 33 | + slice_from_raw_parts_or_dangling(flags_buffer, n_polys as usize) |
30 | 34 | }
|
31 | 35 |
|
32 | 36 | pub fn flags_mut(&mut self) -> &mut [u16] {
|
33 | 37 | let flags_buffer = recast_sys::ffi::recast::poly_mesh_get_flags_mut(self.pin_mut());
|
34 | 38 | let n_polys = recast_sys::ffi::recast::poly_mesh_get_poly_count(self.as_ref());
|
35 |
| - unsafe { std::slice::from_raw_parts_mut(flags_buffer, n_polys as usize) } |
| 39 | + slice_from_raw_parts_mut_or_dangling(flags_buffer, n_polys as usize) |
36 | 40 | }
|
37 | 41 |
|
38 | 42 | pub fn areas(&self) -> &[u8] {
|
39 | 43 | let areas_buffer = recast_sys::ffi::recast::poly_mesh_get_areas(self.as_ref());
|
40 | 44 | let n_polys = recast_sys::ffi::recast::poly_mesh_get_poly_count(self.as_ref());
|
41 |
| - unsafe { std::slice::from_raw_parts(areas_buffer, n_polys as usize) } |
| 45 | + slice_from_raw_parts_or_dangling(areas_buffer, n_polys as usize) |
42 | 46 | }
|
43 | 47 | }
|
44 | 48 |
|
|
0 commit comments