Skip to content

Commit 8e3c7a1

Browse files
Blend mode fixes for renderer and texture
This commit implements get_blend_mode() and set_blend_mode() for renderer and fixes incorrect get_blend_mode() for texture.
1 parent 1b29c7a commit 8e3c7a1

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

src/sdl2/render.rs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use SdlResult;
88
use std::mem;
99
use std::ptr;
1010
use std::raw;
11-
use libc::{c_int, uint32_t, c_float, c_double, c_void};
11+
use libc::{c_int, c_uint, uint32_t, c_float, c_double, c_void};
1212
use rect::Point;
1313
use rect::Rect;
1414
use std::ffi::c_str_to_bytes;
@@ -195,6 +195,23 @@ impl Renderer {
195195
}
196196
}
197197

198+
pub fn set_blend_mode(&self, blend: BlendMode) -> SdlResult<()> {
199+
let ret = unsafe { ll::SDL_SetRenderDrawBlendMode(self.raw, FromPrimitive::from_i64(blend as i64).unwrap()) };
200+
201+
if ret == 0 { Ok(()) }
202+
else { Err(get_error()) }
203+
}
204+
205+
pub fn get_blend_mode(&self) -> SdlResult<BlendMode> {
206+
let blend: c_uint = 0;
207+
let result = unsafe { ll::SDL_GetRenderDrawBlendMode(self.raw, &blend) == 0 };
208+
if result {
209+
Ok(FromPrimitive::from_i64(blend as i64).unwrap())
210+
} else {
211+
Err(get_error())
212+
}
213+
}
214+
198215
pub fn clear(&self) -> SdlResult<()> {
199216
let ret = unsafe { ll::SDL_RenderClear(self.raw) };
200217
if ret == 0 { Ok(()) }
@@ -579,8 +596,8 @@ impl Texture {
579596
}
580597

581598
pub fn get_blend_mode(&self) -> SdlResult<BlendMode> {
582-
let blend: i64 = 0;
583-
let result = unsafe { ll::SDL_GetTextureBlendMode(self.raw, &FromPrimitive::from_i64(blend as i64).unwrap()) == 0 };
599+
let blend: c_uint = 0;
600+
let result = unsafe { ll::SDL_GetTextureBlendMode(self.raw, &blend) == 0 };
584601
if result {
585602
Ok(FromPrimitive::from_i64(blend as i64).unwrap())
586603
} else {

0 commit comments

Comments
 (0)