Skip to content

Commit eff9730

Browse files
authored
Add texture scale mode (#1444)
1 parent d16a7c4 commit eff9730

File tree

4 files changed

+181
-116
lines changed

4 files changed

+181
-116
lines changed

changelog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ when upgrading from a version of rust-sdl2 to another.
33

44
### Next
55

6+
[PR #1444](https://github.com/Rust-SDL2/rust-sdl2/pull/1444) Add texture scale mode api + fix unsafe
7+
68
[PR #1415](https://github.com/Rust-SDL2/rust-sdl2/pull/1415) Store `gfx::framerate::FPSmanager` directly in `FPSManager` instead of on the heap.
79

810
[PR #1450](https://github.com/Rust-SDL2/rust-sdl2/pull/1450) **BREAKING CHANGE** Create ClippingRect type, to disambiguate between no and zero area clipping rect.

src/sdl2/event.rs

Lines changed: 61 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -331,74 +331,74 @@ impl TryFrom<u32> for EventType {
331331
use self::EventType::*;
332332
use crate::sys::SDL_EventType::*;
333333

334-
Ok(match unsafe { transmute(n) } {
335-
SDL_FIRSTEVENT => First,
336-
337-
SDL_QUIT => Quit,
338-
SDL_APP_TERMINATING => AppTerminating,
339-
SDL_APP_LOWMEMORY => AppLowMemory,
340-
SDL_APP_WILLENTERBACKGROUND => AppWillEnterBackground,
341-
SDL_APP_DIDENTERBACKGROUND => AppDidEnterBackground,
342-
SDL_APP_WILLENTERFOREGROUND => AppWillEnterForeground,
343-
SDL_APP_DIDENTERFOREGROUND => AppDidEnterForeground,
344-
345-
SDL_DISPLAYEVENT => Display,
346-
SDL_WINDOWEVENT => Window,
347-
348-
SDL_KEYDOWN => KeyDown,
349-
SDL_KEYUP => KeyUp,
350-
SDL_TEXTEDITING => TextEditing,
351-
SDL_TEXTINPUT => TextInput,
352-
353-
SDL_MOUSEMOTION => MouseMotion,
354-
SDL_MOUSEBUTTONDOWN => MouseButtonDown,
355-
SDL_MOUSEBUTTONUP => MouseButtonUp,
356-
SDL_MOUSEWHEEL => MouseWheel,
357-
358-
SDL_JOYAXISMOTION => JoyAxisMotion,
359-
SDL_JOYBALLMOTION => JoyBallMotion,
360-
SDL_JOYHATMOTION => JoyHatMotion,
361-
SDL_JOYBUTTONDOWN => JoyButtonDown,
362-
SDL_JOYBUTTONUP => JoyButtonUp,
363-
SDL_JOYDEVICEADDED => JoyDeviceAdded,
364-
SDL_JOYDEVICEREMOVED => JoyDeviceRemoved,
365-
366-
SDL_CONTROLLERAXISMOTION => ControllerAxisMotion,
367-
SDL_CONTROLLERBUTTONDOWN => ControllerButtonDown,
368-
SDL_CONTROLLERBUTTONUP => ControllerButtonUp,
369-
SDL_CONTROLLERDEVICEADDED => ControllerDeviceAdded,
370-
SDL_CONTROLLERDEVICEREMOVED => ControllerDeviceRemoved,
371-
SDL_CONTROLLERDEVICEREMAPPED => ControllerDeviceRemapped,
372-
SDL_CONTROLLERTOUCHPADDOWN => ControllerTouchpadDown,
373-
SDL_CONTROLLERTOUCHPADMOTION => ControllerTouchpadMotion,
374-
SDL_CONTROLLERTOUCHPADUP => ControllerTouchpadUp,
334+
match n {
335+
x if x == SDL_FIRSTEVENT as u32 => Ok(First),
336+
337+
x if x == SDL_QUIT as u32 => Ok(Quit),
338+
x if x == SDL_APP_TERMINATING as u32 => Ok(AppTerminating),
339+
x if x == SDL_APP_LOWMEMORY as u32 => Ok(AppLowMemory),
340+
x if x == SDL_APP_WILLENTERBACKGROUND as u32 => Ok(AppWillEnterBackground),
341+
x if x == SDL_APP_DIDENTERBACKGROUND as u32 => Ok(AppDidEnterBackground),
342+
x if x == SDL_APP_WILLENTERFOREGROUND as u32 => Ok(AppWillEnterForeground),
343+
x if x == SDL_APP_DIDENTERFOREGROUND as u32 => Ok(AppDidEnterForeground),
344+
345+
x if x == SDL_DISPLAYEVENT as u32 => Ok(Display),
346+
x if x == SDL_WINDOWEVENT as u32 => Ok(Window),
347+
348+
x if x == SDL_KEYDOWN as u32 => Ok(KeyDown),
349+
x if x == SDL_KEYUP as u32 => Ok(KeyUp),
350+
x if x == SDL_TEXTEDITING as u32 => Ok(TextEditing),
351+
x if x == SDL_TEXTINPUT as u32 => Ok(TextInput),
352+
353+
x if x == SDL_MOUSEMOTION as u32 => Ok(MouseMotion),
354+
x if x == SDL_MOUSEBUTTONDOWN as u32 => Ok(MouseButtonDown),
355+
x if x == SDL_MOUSEBUTTONUP as u32 => Ok(MouseButtonUp),
356+
x if x == SDL_MOUSEWHEEL as u32 => Ok(MouseWheel),
357+
358+
x if x == SDL_JOYAXISMOTION as u32 => Ok(JoyAxisMotion),
359+
x if x == SDL_JOYBALLMOTION as u32 => Ok(JoyBallMotion),
360+
x if x == SDL_JOYHATMOTION as u32 => Ok(JoyHatMotion),
361+
x if x == SDL_JOYBUTTONDOWN as u32 => Ok(JoyButtonDown),
362+
x if x == SDL_JOYBUTTONUP as u32 => Ok(JoyButtonUp),
363+
x if x == SDL_JOYDEVICEADDED as u32 => Ok(JoyDeviceAdded),
364+
x if x == SDL_JOYDEVICEREMOVED as u32 => Ok(JoyDeviceRemoved),
365+
366+
x if x == SDL_CONTROLLERAXISMOTION as u32 => Ok(ControllerAxisMotion),
367+
x if x == SDL_CONTROLLERBUTTONDOWN as u32 => Ok(ControllerButtonDown),
368+
x if x == SDL_CONTROLLERBUTTONUP as u32 => Ok(ControllerButtonUp),
369+
x if x == SDL_CONTROLLERDEVICEADDED as u32 => Ok(ControllerDeviceAdded),
370+
x if x == SDL_CONTROLLERDEVICEREMOVED as u32 => Ok(ControllerDeviceRemoved),
371+
x if x == SDL_CONTROLLERDEVICEREMAPPED as u32 => Ok(ControllerDeviceRemapped),
372+
x if x == SDL_CONTROLLERTOUCHPADDOWN as u32 => Ok(ControllerTouchpadDown),
373+
x if x == SDL_CONTROLLERTOUCHPADMOTION as u32 => Ok(ControllerTouchpadMotion),
374+
x if x == SDL_CONTROLLERTOUCHPADUP as u32 => Ok(ControllerTouchpadUp),
375375
#[cfg(feature = "hidapi")]
376-
SDL_CONTROLLERSENSORUPDATE => ControllerSensorUpdated,
376+
x if x == SDL_CONTROLLERSENSORUPDATE as u32 => Ok(ControllerSensorUpdated),
377377

378-
SDL_FINGERDOWN => FingerDown,
379-
SDL_FINGERUP => FingerUp,
380-
SDL_FINGERMOTION => FingerMotion,
381-
SDL_DOLLARGESTURE => DollarGesture,
382-
SDL_DOLLARRECORD => DollarRecord,
383-
SDL_MULTIGESTURE => MultiGesture,
378+
x if x == SDL_FINGERDOWN as u32 => Ok(FingerDown),
379+
x if x == SDL_FINGERUP as u32 => Ok(FingerUp),
380+
x if x == SDL_FINGERMOTION as u32 => Ok(FingerMotion),
381+
x if x == SDL_DOLLARGESTURE as u32 => Ok(DollarGesture),
382+
x if x == SDL_DOLLARRECORD as u32 => Ok(DollarRecord),
383+
x if x == SDL_MULTIGESTURE as u32 => Ok(MultiGesture),
384384

385-
SDL_CLIPBOARDUPDATE => ClipboardUpdate,
386-
SDL_DROPFILE => DropFile,
387-
SDL_DROPTEXT => DropText,
388-
SDL_DROPBEGIN => DropBegin,
389-
SDL_DROPCOMPLETE => DropComplete,
385+
x if x == SDL_CLIPBOARDUPDATE as u32 => Ok(ClipboardUpdate),
386+
x if x == SDL_DROPFILE as u32 => Ok(DropFile),
387+
x if x == SDL_DROPTEXT as u32 => Ok(DropText),
388+
x if x == SDL_DROPBEGIN as u32 => Ok(DropBegin),
389+
x if x == SDL_DROPCOMPLETE as u32 => Ok(DropComplete),
390390

391-
SDL_AUDIODEVICEADDED => AudioDeviceAdded,
392-
SDL_AUDIODEVICEREMOVED => AudioDeviceRemoved,
391+
x if x == SDL_AUDIODEVICEADDED as u32 => Ok(AudioDeviceAdded),
392+
x if x == SDL_AUDIODEVICEREMOVED as u32 => Ok(AudioDeviceRemoved),
393393

394-
SDL_RENDER_TARGETS_RESET => RenderTargetsReset,
395-
SDL_RENDER_DEVICE_RESET => RenderDeviceReset,
394+
x if x == SDL_RENDER_TARGETS_RESET as u32 => Ok(RenderTargetsReset),
395+
x if x == SDL_RENDER_DEVICE_RESET as u32 => Ok(RenderDeviceReset),
396396

397-
SDL_USEREVENT => User,
398-
SDL_LASTEVENT => Last,
397+
x if x == SDL_USEREVENT as u32 => Ok(User),
398+
x if x == SDL_LASTEVENT as u32 => Ok(Last),
399399

400-
_ => return Err(()),
401-
})
400+
_ => Err(()),
401+
}
402402
}
403403
}
404404

src/sdl2/pixels.rs

Lines changed: 43 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use crate::sys;
22
use std::convert::TryFrom;
3-
use std::mem::transmute;
43

54
use crate::get_error;
65

@@ -453,47 +452,49 @@ impl TryFrom<u32> for PixelFormatEnum {
453452
fn try_from(n: u32) -> Result<Self, Self::Error> {
454453
use self::PixelFormatEnum::*;
455454

456-
Ok(match unsafe { transmute(n) } {
457-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_UNKNOWN => Unknown,
458-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX1LSB => Index1LSB,
459-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX1MSB => Index1MSB,
460-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX4LSB => Index4LSB,
461-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX4MSB => Index4MSB,
462-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX8 => Index8,
463-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB332 => RGB332,
464-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB444 => RGB444,
465-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB555 => RGB555,
466-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGR555 => BGR555,
467-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ARGB4444 => ARGB4444,
468-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGBA4444 => RGBA4444,
469-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ABGR4444 => ABGR4444,
470-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGRA4444 => BGRA4444,
471-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ARGB1555 => ARGB1555,
472-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGBA5551 => RGBA5551,
473-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ABGR1555 => ABGR1555,
474-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGRA5551 => BGRA5551,
475-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB565 => RGB565,
476-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGR565 => BGR565,
477-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB24 => RGB24,
478-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGR24 => BGR24,
479-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB888 => RGB888,
480-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGBX8888 => RGBX8888,
481-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGR888 => BGR888,
482-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGRX8888 => BGRX8888,
483-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ARGB8888 => ARGB8888,
484-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGBA8888 => RGBA8888,
485-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ABGR8888 => ABGR8888,
486-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGRA8888 => BGRA8888,
487-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ARGB2101010 => ARGB2101010,
488-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_YV12 => YV12,
489-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_IYUV => IYUV,
490-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_YUY2 => YUY2,
491-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_UYVY => UYVY,
492-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_YVYU => YVYU,
493-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_NV12 => NV12,
494-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_NV21 => NV21,
495-
_ => return Err(()),
496-
})
455+
match n {
456+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_UNKNOWN as u32 => Ok(Unknown),
457+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX1LSB as u32 => Ok(Index1LSB),
458+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX1MSB as u32 => Ok(Index1MSB),
459+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX4LSB as u32 => Ok(Index4LSB),
460+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX4MSB as u32 => Ok(Index4MSB),
461+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX8 as u32 => Ok(Index8),
462+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB332 as u32 => Ok(RGB332),
463+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB444 as u32 => Ok(RGB444),
464+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB555 as u32 => Ok(RGB555),
465+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGR555 as u32 => Ok(BGR555),
466+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ARGB4444 as u32 => Ok(ARGB4444),
467+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGBA4444 as u32 => Ok(RGBA4444),
468+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ABGR4444 as u32 => Ok(ABGR4444),
469+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGRA4444 as u32 => Ok(BGRA4444),
470+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ARGB1555 as u32 => Ok(ARGB1555),
471+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGBA5551 as u32 => Ok(RGBA5551),
472+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ABGR1555 as u32 => Ok(ABGR1555),
473+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGRA5551 as u32 => Ok(BGRA5551),
474+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB565 as u32 => Ok(RGB565),
475+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGR565 as u32 => Ok(BGR565),
476+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB24 as u32 => Ok(RGB24),
477+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGR24 as u32 => Ok(BGR24),
478+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB888 as u32 => Ok(RGB888),
479+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGBX8888 as u32 => Ok(RGBX8888),
480+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGR888 as u32 => Ok(BGR888),
481+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGRX8888 as u32 => Ok(BGRX8888),
482+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ARGB8888 as u32 => Ok(ARGB8888),
483+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGBA8888 as u32 => Ok(RGBA8888),
484+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ABGR8888 as u32 => Ok(ABGR8888),
485+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGRA8888 as u32 => Ok(BGRA8888),
486+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ARGB2101010 as u32 => {
487+
Ok(ARGB2101010)
488+
}
489+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_YV12 as u32 => Ok(YV12),
490+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_IYUV as u32 => Ok(IYUV),
491+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_YUY2 as u32 => Ok(YUY2),
492+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_UYVY as u32 => Ok(UYVY),
493+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_YVYU as u32 => Ok(YVYU),
494+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_NV12 as u32 => Ok(NV12),
495+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_NV21 as u32 => Ok(NV21),
496+
_ => Err(()),
497+
}
497498
}
498499
}
499500

src/sdl2/render.rs

Lines changed: 75 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ use std::rc::Rc;
5555

5656
use crate::sys;
5757
use crate::sys::SDL_BlendMode;
58+
use crate::sys::SDL_ScaleMode;
5859
use crate::sys::SDL_TextureAccess;
5960

6061
/// Contains the description of an error returned by SDL
@@ -110,11 +111,12 @@ impl TryFrom<u32> for TextureAccess {
110111
use self::TextureAccess::*;
111112
use crate::sys::SDL_TextureAccess::*;
112113

113-
Ok(match unsafe { transmute(n) } {
114-
SDL_TEXTUREACCESS_STATIC => Static,
115-
SDL_TEXTUREACCESS_STREAMING => Streaming,
116-
SDL_TEXTUREACCESS_TARGET => Target,
117-
})
114+
match n {
115+
x if x == SDL_TEXTUREACCESS_STATIC as u32 => Ok(Static),
116+
x if x == SDL_TEXTUREACCESS_STREAMING as u32 => Ok(Streaming),
117+
x if x == SDL_TEXTUREACCESS_TARGET as u32 => Ok(Target),
118+
_ => Err(()),
119+
}
118120
}
119121
}
120122

@@ -164,14 +166,42 @@ impl TryFrom<u32> for BlendMode {
164166
use self::BlendMode::*;
165167
use crate::sys::SDL_BlendMode::*;
166168

167-
Ok(match unsafe { transmute(n) } {
168-
SDL_BLENDMODE_NONE => None,
169-
SDL_BLENDMODE_BLEND => Blend,
170-
SDL_BLENDMODE_ADD => Add,
171-
SDL_BLENDMODE_MOD => Mod,
172-
SDL_BLENDMODE_MUL => Mul,
173-
SDL_BLENDMODE_INVALID => Invalid,
174-
})
169+
match n {
170+
x if x == SDL_BLENDMODE_NONE as u32 => Ok(None),
171+
x if x == SDL_BLENDMODE_BLEND as u32 => Ok(Blend),
172+
x if x == SDL_BLENDMODE_ADD as u32 => Ok(Add),
173+
x if x == SDL_BLENDMODE_MOD as u32 => Ok(Mod),
174+
x if x == SDL_BLENDMODE_MUL as u32 => Ok(Mul),
175+
x if x == SDL_BLENDMODE_INVALID as u32 => Ok(Invalid),
176+
_ => Err(()),
177+
}
178+
}
179+
}
180+
181+
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
182+
pub enum ScaleMode {
183+
/// nearest pixel sampling. default
184+
Nearest = SDL_ScaleMode::SDL_ScaleModeNearest as isize,
185+
/// linear filtering
186+
Linear = SDL_ScaleMode::SDL_ScaleModeLinear as isize,
187+
/// anisotropic filtering
188+
Best = SDL_ScaleMode::SDL_ScaleModeBest as isize,
189+
}
190+
191+
impl TryFrom<u32> for ScaleMode {
192+
type Error = ();
193+
194+
fn try_from(n: u32) -> Result<Self, Self::Error> {
195+
match n {
196+
x if x == crate::sys::SDL_ScaleMode::SDL_ScaleModeNearest as u32 => {
197+
Ok(ScaleMode::Nearest)
198+
}
199+
x if x == crate::sys::SDL_ScaleMode::SDL_ScaleModeLinear as u32 => {
200+
Ok(ScaleMode::Linear)
201+
}
202+
x if x == crate::sys::SDL_ScaleMode::SDL_ScaleModeBest as u32 => Ok(ScaleMode::Best),
203+
_ => Err(()),
204+
}
175205
}
176206
}
177207

@@ -2186,6 +2216,26 @@ impl InternalTexture {
21862216
}
21872217
}
21882218

2219+
#[doc(alias = "SDL_SetTextureScaleMode")]
2220+
pub fn set_scale_mode(&mut self, scale: ScaleMode) {
2221+
let ret = unsafe { sys::SDL_SetTextureScaleMode(self.raw, transmute(scale as u32)) };
2222+
if ret != 0 {
2223+
panic!("Error setting scale mode: {}", get_error())
2224+
}
2225+
}
2226+
2227+
#[doc(alias = "SDL_GetTextureScaleMode")]
2228+
pub fn scale_mode(&self) -> ScaleMode {
2229+
let mut scale: MaybeUninit<SDL_ScaleMode> = mem::MaybeUninit::uninit();
2230+
let ret = unsafe { sys::SDL_GetTextureScaleMode(self.raw, scale.as_mut_ptr()) };
2231+
if ret != 0 {
2232+
panic!("{}", get_error())
2233+
} else {
2234+
let scale = unsafe { scale.assume_init() };
2235+
ScaleMode::try_from(scale as u32).unwrap()
2236+
}
2237+
}
2238+
21892239
#[doc(alias = "SDL_SetTextureAlphaMod")]
21902240
pub fn set_alpha_mod(&mut self, alpha: u8) {
21912241
let ret = unsafe { sys::SDL_SetTextureAlphaMod(self.raw, alpha) };
@@ -2529,6 +2579,18 @@ impl<'r> Texture<'r> {
25292579
InternalTexture { raw: self.raw }.color_mod()
25302580
}
25312581

2582+
/// Sets the scale mode for use when rendered.
2583+
#[inline]
2584+
pub fn set_scale_mode(&mut self, scale: ScaleMode) {
2585+
InternalTexture { raw: self.raw }.set_scale_mode(scale)
2586+
}
2587+
2588+
/// Gets the scale mode for use when rendered.
2589+
#[inline]
2590+
pub fn scale_mode(&self) -> ScaleMode {
2591+
InternalTexture { raw: self.raw }.scale_mode()
2592+
}
2593+
25322594
/// Sets an additional alpha value multiplied into render copy operations.
25332595
#[inline]
25342596
pub fn set_alpha_mod(&mut self, alpha: u8) {

0 commit comments

Comments
 (0)