* make `pixels::Color` have a stable representation (`repr(C)`) this allows for faster code and is also needed for SDL_RenderGeometry * add binding for SDL_RenderGeometryRaw * add example of advanced use of `Canvas::render_geometry` * update unsafe trait docs to include a needed guarantee and refer to one doc comment instead of duplicating similar ones * rework almost everything - the macro was very hard to get sound, auto deref has to be prevented somehow - the unsafe traits could not be implemented for types defined in other crates the unsafety must be kept simple, users now only need to provide the right offsets, which core::mem::offset_of does update example * add convenience impls for &Vec<_> to VertexIndices * update example to use 2 ways of using render_geometry_raw, and use render_geometry * mention alignment in safety comments in render_geometry example * fix and improve docs * update changelog
21 KiB
In this file will be listed the changes, especially the breaking ones that one should be careful of when upgrading from a version of rust-sdl2 to another.
Next
PR #1472 Add Canvas::render_geometry, Canvas::render_geometry_raw and an example that uses them both. Both these bindings use SDL_RenderGeometryRaw.
PR #1473 BREAKING CHANGE Fix UB in ToColor implementations and remove implementation for isize.
PR #1414 Use TTF_GlyphIsProvided32 and TTF_GlyphMetrics32 instead of the 16 bit ones.
PR #1435 BREAKING CHANGE Fix some undefined behavior. Breaking changes: mixer::Chunk's fields are now private and callbacks to TimerSubsystem::add_timer must now live for 'static, also allowing some lifetime parameters to be removed.
PR #1461 BREAKING CHANGE Added new SensorType variants: LeftGyroscope, RightGyroscope, LeftAccelerometer, RightAccelerometer
PR #1461 BREAKING CHANGE Sensor::get_data now returns correct SensorData::Gyro enum
PR #1437 BREAKING CHANGE Prevent users from creating Sdl2TtfContext out of nothing and use SDL's reference counting init/quit
PR #1464 Added binding for Mix_OpenAudioDevice
PR #1451 Add gamma_ramp_arrays and calculate_gamma_ramp.
PR #1459 Fix image and mixer init flag logic
PR #1444 Add texture scale mode api + fix unsafe
PR #1415 Store gfx::framerate::FPSmanager directly in FPSManager instead of on the heap.
PR #1450 BREAKING CHANGE Create ClippingRect type, to disambiguate between no and zero area clipping rect.
PR #1416 Apply clippy fixes, fix deprecations and other code quality improvements.
PR #1408 Allow comparing Versions, add constant with the version the bindings were compiled with.
PR #1407 Add new use_ios_framework for linking to SDL2.framework on iOS
PR #1427 BREAKING CHANGE Add system locale support. A new event type Event::LocaleChanged has been added.
v0.37.0
PR #1406 Update bindings to SDL 2.0.26, add Event.is_touch() for mouse events, upgrade wgpu to 0.20 in examples
PR #1398 Fix bug in rect.shift logic
PR #1404 Make SdlDrop a zero sized type.
PR #1394 Do not pull the SDL repository if not using bundled in build.rs
PR #1394 Fix static linking
PR #1389 Fix some undefined behavior.
PR #1378 BREAKING CHANGE Change Keycode to be a struct rather than an enum. Fix Keycode::from_scancode for non-QWERTY keyboard layouts.
PR #1390 Apply clippy fixes, fix deprecations and other code quality improvements.
PR #1385 Upgrade raw-window-handle to 0.6.0
PR #1380 Add controller vendor_id() and product_id()
PR #1368 Remove unnecessary unsafe in Window interface. Make Window Clone.
PR #1366 Add Primary Selection bindings.
v0.36.0
PR #1270 BREAKING CHANGE Remove &mut self requirement in TimerSubsystem::delay; Add TimerSubsystem::ticks64
PR #1275 BREAKING CHANGE Update raw-window-handle to 0.5
PR #1225 Update wgpu to 0.12 in examples
PR #1250 Add lib64 to native library search path when using bundled feature
PR #1240 BREAKING CHANGE Take PixelMasks by reference
PR #1254 BREAKING CHANGE Make SdlDrop and SubsystemDrop safer; forbid external code from constructing SdlDrop
PR #1318 Add NV12, NV21 to PixelFormatEnum
PR #1332 Fix size_hint implementations for {audio,video,render}::DriverIterator
PR #1333 Implement FusedIterator, DoubleEndedIterator, and nth[_back] for {audio,video,render}::DriverIterator
PR #1337 Fix "Cannot initialize Sdl from more than one thread" for tests / CI
PR #1346 Add basic Shaped Window support
PR #1314 Add "ALWAYS ON TOP" support for X11
v0.35.2
PR #1173 Fix segfault when using timer callbacks
PR #1183 WinRT support for raw-window-handle
PR #1182 Updated raw-window-handle to 0.4
PR #1189 Added AudioQueue::queue_audio and deprecated AudioQueue::queue
PR #1164 Added raw-window-handle support for Android
PR #1165 Added binding for SDL_GetDisplayOrientation and SDL_DISPLAYEVENT
v0.35.0
-
BREAKING CHANGE Update
sdl2-sys/sdl_bindings.rsto use enums instead of consts. If you were usingsdl2-sys's enum variants directly in your project, you may be affected. If you only used sdl2 calls, there should not be any problems. -
BREAKING CHANGE SDL 2.0.14 or higher is now recommended due to the new binding being added for
SDL_OpenURL. If you get linking errors, upgrade your SDL2 libraries, or swap to using thebundledfeature.
PR #1138 Added binding for SDL_OpenURL
PR #1150 Do not download SDL2 sources when using bundled feature
PR #1112 Add wrapper functions for SDL_RenderSetIntegerScale and SDL_RenderGetIntegerScale
PR #1156 Maybe breaking change: new variants to enum GameController, and prevent panic with unrecognized buttons.
PR #1153 SDL_GL_GetCurrentContext and SDL_RenderFlush added.
PR #1131 Added Sensor API.
v0.34.5
PR #1100 Added binding for SDL_GetDisplayUsableBounds
PR #1102 Correctly se linux and macSO built libraries when using bundled without static-link.
PR #1098 Fix potential heap corruption when using AudioCVT::convert
PR #1088 Rollback of PR #1081: Broke dynamic linking on Windows
Various fixes to CI.
v0.34.4
PR #1086 Update bundled to use SDL2 2.0.14
PR #1033 Changed signature of TimerSubsystem::ticks to accept &self.
PR #1057: fix memory safety bug in set_error
PR #1081: Allow bundled build to be built in debug mode. Fixes issue when linking binary with mixed debug+release CRT dependencies.
PR #1080: Fix line endings of patches to lf so patching of sources works on Windows.
PR #1031: Add patch to fix metal detection (https://bugzilla.libsdl.org/show_bug.cgi?id=4988)
v0.34.3
PR #1027: upgrade "bundled" version of SDL2 to 2.0.12
PR #1020: revert undefined behavior introduction.
Commit: Fix clippy issue
Commit: Temporarily suppress dangerous clippy hints
PR#1014: add load_texture_bytes interface for load texture from buffer
v0.34.2
PR #1012 Fix use after free with AudioDevice::open and AudioDevice::open_queue
PR #1010 Fix compilation with gcc10.
PR #1009
Add support for linking to development libraries from vcpkg, and automatically setting up a vcpkg installation using cargo-vcpkg.
v0.34.1
PR #1004 + PR #1005: Add convenience functions for Window and Event.
PR #996:
Impl From<i32> for WindowPos.
PR #988:
Add convenience functions for Texture.
v0.34.0
PR #962:
Added raw-window-handle support for Windows, Linux (X11 and Wayland) and macOS.
PR #964: Breaking change: Change joystick instance IDs from i32 to u32.
PR #965: Added invert method for Color, and added more Color names as constants.
PR #968
Pass SDL2 include directories to sdl2-sys's dependant crates through DEP_SDL2_INCLUDE.
PR #970
Add Chunk::from_buffer in mixer.
PR #976
Fix compilation with use-bingen feature.
PR #977
Add cpuinfo::has_avx2 and cpuinfo::has_avx512f
PR #982 Support for loading Opus format in mixer.
PR #980 Fix compilation on Windows.
v0.33
PR #956 + PR #960 + PR #951: Fix some build targets.
PR #948 + PR #957:
Remove the num dependency.
PR #947: Upgraded the "bundled" version of SDL2 to 2.0.10
PR #940:
Breaking change Removed the rand dependency for random colors. You will have to implement your own random colors from now on.
PR #933: Breaking change Removed AudioFormatNum::zero(), use AudioFormatNum::SILENCE constant instead.
PR #907:
Changed the data type to i32 for the which field for the events ControllerDeviceAdded and JoyDeviceAdded.
PR #882:
Ignore unknown bits in SDL_Keysym's mod field (key modifiers) when constructing Event::KeyDown and Event::KeyUp. Deprecate sdl2::event::Event::unwrap_keymod, which had been made public accidentally.
PR #898:
Implements TryFrom<PixelFormatEnum> for PixelFormat
v0.32.2
PR #868:
Added inplace operations for rect::Point.
PR #827: Added 32-bit array pixelformats
PR #824:
Added controller::set_rumble and joystick::set_rumble, wrappers for SDL_GameControllerRumble and SDL_JoystickRumble respectively.
PR #867:
Added Window::opacity and Window::set_opacity, wrappers for SDL_GetWindowOpacity and SDL_SetWindowOpacity respectively. This bumps the minimum SDL2 version requirement from 2.0.4 to 2.0.5.
v0.32
PR #790: Added missing window_id field to Event::DropFile
PR #789: Audio Safety Fixes
PR #785: Vulkan Support
- Move ffi of features (mixer, ...) into
sys - Updated SDL2's default version to 2.0.8
PR #780: Fixed a panic in keyboard::Mod
PR #775: Added get_platform
PR #774: add_timer is now must_use
PR #764: impl Hash for Point and Rect
PR #763: Allow -sys to build for windows-gnu target
PR #751:
Breaking change gl_setswap_interval now returns a Result instead of a bool.
PR #759: Expose Joystick power level
- Fix memory leak in
filesystem::base_path() - Fix memory leak on
ClipboardUtil::clipboard_text()
PR #740: Implement Debug for Event
PR #737:
Fix ClipboardUtil::set_clipboard_text to return an Ok when it went well.
PR #733:
Add video::border_size -> Result<(u16, u16, u16, u16), String> equivalent of SDL_GetWindowBorderSize()
PR #732:
Implemented From<(u8, u8, u8)> and From<(u8, u8, u8, u8)> for pixels::Color.
Canvas.set_draw_color can now be called with tuples or other types which implements Into<pixels::Color>
- Breaking change set_video_minimize_on_focus_lost was renamed to …minimize_on_focus_loss, as it should be. As a bonus, it works now.
- Although this is a breaking change, this function was not working in the first place, so this is hardly a true breaking change
v0.31
- Adds feature "bundled" as well as "static-link". Entirely compatible wit hthe "use-bindgen" feature. Windows-gnu is not supported yet, any help is needed on that side, but every other major platform should be supported.
- Breaking change Change HatState::Leftdown casing into HatState::LeftDown to be consistent with naming.
- sdl2-sys can now be generated at compile time by bindgen (Opt-in required with "use-bindgen" feature)
- The new sdl2-sys source code is generated by bindgen, hence almost everything that uses sdl2-sys will be broken. The fixes are small but still preset.
- Support Audio Capture in AudioCallbacks.
- Breaking change Make get_swap_interval return an enum instead of i32
- The signature of set_swap_interval has been changed as well, but it shouldn't breaking existing code too much.
- Adds the
unsafe_texturesfeature to this crate, allowing to get rid of the lifetimes inTextures in therendermodule.
- Adds the
Music::from_static_bytesfunction, which creates a Music instance with the static lifetime from a buffer that also has a static lifetime.
- Makes the fields of the
sdl2::mixer::Channel(i32)andsdl::mixer::Group(i32)structs public so they can be instantiated directly, and deprecatessdl2::mixer::channel(i32).
- Breaking change Updates the
whichfields ofsdl2::Event::ControllerDeviceAddedandsdl2::Event::JoyDeviceAddedto beu32s so they can be used withsdl2::GameControllerSubsystemandsdl::JoystickSubsystemmethods directly. - Breaking change Updates
sdl2::HapticSubsystem::open_from_joystick_idto correctly advertisejoystick_indexas being au32. - This should only mean removing type conversions which were previously needed to use these values, or changing incorrect assumptions in existing code.
v0.30
Re-exported sdl2_sys as sdl2::sys
The path of soundness isn't an easy one; sometimes ease of use has to be sacrificed for soundness and safety! This change is a breaking change, and a huge one at that.
You will probably have to refactor some parts of your code, but this is the price to pay for soundness and runtime safety.
Breaking Changes:
Rendererhas been renamed and split intoCanvasandTextureCreator.Canvascan store aSurfaceor aWindow, and can be used to render into these as well.TextureCreatorcreatesTextures and is used by Texture to make sure they don't live longer than expected.set_render_targethas been removed and has been replaced withCanvas::with_texture_canvasandCanvas::with_multiple_texture_canvas- Deleted
WindowRef, it wasn't useful anymore.
Other Changes:
- Added
PixelFormatEnum::supports_alpha(&self) -> boolmethod. - A single Game Of Life example has been added to show the basic capabilities of the new
CanvasandTextureCreatorstructs, as well as adding a very basic game to show how to handle input / game changes in a basic game.
You won't have to worry about what target your Renderer has at runtime anymore, everything
is done at compile time now !
- Changed signature of
Surface::fill_rects(old | new) - Changed various
Option<T>parameters intoInto<Option<T>>parameters. For instance, it is now possible to do this:
surface.blit(None,Rect::new(5,5,5,5)); // instead of surface.blit(None,Some(Rect::new(5,5,5,5)));
- Added hint-specific functions to
sdl2::hint
sdl2::hint::set_video_minimize_on_focus_lost(bool) -> bool;
sdl2::hint::set_video_minimize_on_focus_lost_with_priority(bool, sdl2::hint::Hint) -> bool;
sdl2::hint::get_video_minimize_on_focus_lost() -> bool;
- Breaking Change: Changed Color to be a struct rather than an enum.
- Takes less space, easier to use, old constructors are still available.
- Matching is no longer necessary to read the component values.
- Struct rather than variant construction is required in static initializers.
let color = Color { r: 255, g: 0, b: 0, a: 255 };
let color = Color::RGBA(255, 0, 0, 255);
let color = Color::RGB(255, 0, 0);
let (r, g, b) = color.rgb();
let (r, g, b, a) = color.rgba();
- VideoSystem::display_name now returns a
Result<String, String>instead of aString. - This prevents a segfault when the requested display index is out of bounds
window.surface()has been changed and is now more intuitive to use.- The example in
examples/no-renderer.rsshows how to use this feature.
- Deprecated
Rect::contains, addedRect::contains_pointandRect::contains_rect.containsandcontains_pointare close but different ! See here