Skip to content

Commit

Permalink
Switch to unsafe code instead of bytemuck
Browse files Browse the repository at this point in the history
  • Loading branch information
JulianKnodt committed Jul 19, 2023
1 parent c72f8e3 commit 369dd33
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 10 deletions.
18 changes: 16 additions & 2 deletions src/codecs/hdr/decoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -484,7 +484,14 @@ impl<R: BufRead> HdrDecoder<R> {
pub fn read_image_ldr(self) -> ImageResult<Vec<Rgb<u8>>> {
let sz = (self.width * self.height) as usize;
let mut buf = vec![Rgb([0; 3]); sz];
self.read_image_ldr_buf(bytemuck::try_cast_slice_mut(buf.as_mut_slice()).unwrap())?;
// SAFETY:
// RGB is a loose wrapper around [T; 3], thus this
// cast is just flattening out the nesting.
let slice: &mut [u8] = unsafe {
let raw_ptr = buf.as_mut_ptr() as *mut u8;
std::slice::from_raw_parts_mut(raw_ptr, sz * 3)
};
self.read_image_ldr_buf(slice)?;
Ok(buf)
}
fn read_image_ldr_buf(self, buf: &mut [u8]) -> ImageResult<()> {
Expand All @@ -497,7 +504,14 @@ impl<R: BufRead> HdrDecoder<R> {
pub fn read_image_hdr(self) -> ImageResult<Vec<Rgb<f32>>> {
let sz = (self.width * self.height) as usize;
let mut buf = vec![Rgb([0.0f32; 3]); sz];
self.read_image_hdr_buf(bytemuck::try_cast_slice_mut(buf.as_mut_slice()).unwrap())?;
// SAFETY:
// RGB is a loose wrapper around [T; 3], thus this
// cast is just flattening out the nesting.
let slice: &mut [f32] = unsafe {
let raw_ptr = buf.as_mut_ptr() as *mut f32;
std::slice::from_raw_parts_mut(raw_ptr, sz * 3)
};
self.read_image_hdr_buf(slice)?;
Ok(buf)
}

Expand Down
8 changes: 0 additions & 8 deletions src/color.rs
Original file line number Diff line number Diff line change
Expand Up @@ -349,14 +349,6 @@ impl<T> From<[T; $channels]> for $ident<T> {
Self(c)
}
}

unsafe impl<T> bytemuck::Zeroable for $ident<T> where T: bytemuck::Zeroable {
fn zeroed() -> Self {
Self(<[T; $channels] as bytemuck::Zeroable>::zeroed())
}
}
unsafe impl<T> bytemuck::Pod for $ident<T> where T: bytemuck::Pod {}

)* // END Structure definitions

}
Expand Down

0 comments on commit 369dd33

Please sign in to comment.