Document where I put all the little design decisions that go into this library.
- Allocations A few functiosn in raylib return a buffer that should be deallocated by the user. Previously, we copied this data into a Vector and then freed with libc::free.
If the user had a custom alocator or some other strange linking strategy, this would free an invalid pointer.
Now we cast buffers to ManuallyDrop<Box<[T]>>
This allows us to created a box slice and have all the crazy iterator shenanigans users love, without invoking a copy allocation.
We use Box::leak
and ManuallyDrop::take
to get the slice and then cast that to a * void
for raylibs various UnloadX
functions. If an UnloadX
function doesn't exist, we use the MemFree
function to return memory using the same allocator as raylib.