-
Notifications
You must be signed in to change notification settings - Fork 476
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Provide memory buffer -> mixer Chunk conversion methods #970
Conversation
6a2ec5b
to
252b468
Compare
This basically provides an API to access Mix_QuickLoad_WAV and Mix_QuickLoad_RAW with one caveat – thie API takes ownership of the buffers, while Mix_QuickLoad_* functions don't. Since Rust-SDL2 wraps Mix_Chunks in its own structure with its own buffer ownership flag it's easy to work around that and deallocate the buffer when Chunk is dropped. There are few design considerations here: * Taking ownership of the buffer. I couldn't come up with a way to get a Chunk based on a buffer while still keeping the code safe and making sure that as long as Chunk is alive the buffer is also alive *and* not making the change be terribly involved and disruptive * What's the best way to take an ownership of a buffer passed as a parameter? I came up with Box<[T]> as it seems universal enough, but I expect a more idiomatic Rust way may exist. I modified the mixer demo to show how the API is used, a beep is generated when no sound file is passed to the example.
252b468
to
9dde795
Compare
Actually, I'm not sure if integrating |
Mix_QuickLoad_WAV performs buffer traversal assuming we passed it enough data. This is not necessarily true and protecting against it would duplicate some of the Mix_QuickLoad_WAV logic here. As this is less useful than from_raw_buffer() let's drop it for now.
I removed the |
Is there something I can do to get this merged? If this is inappropriate to be included in Rust-SDL2 just let me know. |
Sorry I totally forgot about it, LGTM so I'll merge this. |
Cheers! |
Provide memory buffer -> mixer Chunk conversion methods
This basically provides an API to access Mix_QuickLoad_WAV and
Mix_QuickLoad_RAW with one caveat – thie API takes ownership of the
buffers, while Mix_QuickLoad_* functions don't. Since Rust-SDL2 wraps
Mix_Chunks in its own structure with its own buffer ownership flag it's
easy to work around that and deallocate the buffer when Chunk is
dropped.
There are few design considerations here:
get a Chunk based on a buffer while still keeping the code safe and
making sure that as long as Chunk is alive the buffer is also alive
and not making the change be terribly involved and disruptive
parameter? I came up with Box<[T]> as it seems universal enough,
but I expect a more idiomatic Rust way may exist.
I modified the mixer demo to show how the API is used, a beep is
generated when no sound file is passed to the example.