summaryrefslogtreecommitdiff
path: root/vendor/bytemuck/README.md
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2024-01-08 00:21:28 +0300
committerValentin Popov <valentin@popov.link>2024-01-08 00:21:28 +0300
commit1b6a04ca5504955c571d1c97504fb45ea0befee4 (patch)
tree7579f518b23313e8a9748a88ab6173d5e030b227 /vendor/bytemuck/README.md
parent5ecd8cf2cba827454317368b68571df0d13d7842 (diff)
downloadfparkan-1b6a04ca5504955c571d1c97504fb45ea0befee4.tar.xz
fparkan-1b6a04ca5504955c571d1c97504fb45ea0befee4.zip
Initial vendor packages
Signed-off-by: Valentin Popov <valentin@popov.link>
Diffstat (limited to 'vendor/bytemuck/README.md')
-rw-r--r--vendor/bytemuck/README.md60
1 files changed, 60 insertions, 0 deletions
diff --git a/vendor/bytemuck/README.md b/vendor/bytemuck/README.md
new file mode 100644
index 0000000..7b91a05
--- /dev/null
+++ b/vendor/bytemuck/README.md
@@ -0,0 +1,60 @@
+* **[Latest Docs.rs Here](https://docs.rs/bytemuck/)**
+
+[![License:Zlib](https://img.shields.io/badge/License-Zlib-brightgreen.svg)](https://opensource.org/licenses/Zlib)
+![Minimum Rust Version](https://img.shields.io/badge/Min%20Rust-1.34-green.svg)
+[![crates.io](https://img.shields.io/crates/v/bytemuck.svg)](https://crates.io/crates/bytemuck)
+
+# bytemuck
+
+A crate for mucking around with piles of bytes.
+
+This crate lets you safely perform "bit cast" operations between data types.
+That's where you take a value and just reinterpret the bits as being some other
+type of value, without changing the bits.
+
+* This is **not** like the [`as` keyword][keyword-as]
+* This is **not** like the [`From` trait][from-trait]
+* It is **most like** [`f32::to_bits`][f32-to_bits], just generalized to let you
+ convert between all sorts of data types.
+
+[keyword-as]: https://doc.rust-lang.org/nightly/std/keyword.as.html
+[from-trait]: https://doc.rust-lang.org/nightly/core/convert/trait.From.html
+[f32-to_bits]: https://doc.rust-lang.org/nightly/std/primitive.f32.html#method.to_bits
+
+### Here's the part you're more likely to care about: *you can do this with slices too!*
+
+When a slice is involved it's not a *direct* bitcast. Instead, the `cast_slice`
+and `cast_slice_mut` functions will pull apart a slice's data and give you a new
+slice that's the same span of memory just viewed as the new type. If the size of
+the slice's element changes then the length of the slice you get back will be
+changed accordingly.
+
+This lets you cast a slice of color values into a slice of `u8` and send it to
+the GPU, or things like that. I'm sure there's other examples, but honestly this
+crate is as popular as it is mostly because of Rust's 3D graphics community
+wanting to cast slices of different types into byte slices for sending to the
+GPU. Hi friends! Push those vertices, or whatever it is that you all do.
+
+## See Also
+
+While `bytemuck` is full of unsafe code, I've also started a "sibling crate"
+called [bitfrob](https://docs.rs/bitfrob/latest/bitfrob/), which is where
+operations that are 100% safe will be added.
+
+## Stability
+
+* The crate is 1.0 and I consider this it to be "basically done". New features
+ are usually being accepted when other people want to put in the work, but
+ myself I wanna move on to using `bytemuck` in bigger projects.
+* The default build of the `bytemuck` crate will continue to work with `rustc-1.34`
+ for at least the rest of the `1.y.z` versions.
+* Any other cargo features of the crate **are not** held to the same standard, and
+ may work only on the latest Stable or even only on latest Nightly.
+
+**Future Plans:** Once the [Safe Transmute Project][pg-st] completes and
+stabilizes ("eventually") this crate will be updated to use that as the
+underlying mechanism for transmutation bounds, and a 2.0 version of `bytemuck`
+will be released. The hope is for the 1.0 to 2.0 transition to be as seamless as
+possible, but the future is always uncertain.
+
+[pg-st]: https://rust-lang.github.io/rfcs/2835-project-safe-transmute.html