From 4737d887da091dd200d3163e5e7a0fa7f953cff3 Mon Sep 17 00:00:00 2001 From: Tony Aldridge Date: Sat, 24 Aug 2013 19:38:42 +0100 Subject: [PATCH] All sane Video functions implemented --- src/pixels.rs | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++- src/video.rs | 13 +++++---- 2 files changed, 87 insertions(+), 6 deletions(-) diff --git a/src/pixels.rs b/src/pixels.rs index 9ad5ee6e..131dff59 100644 --- a/src/pixels.rs +++ b/src/pixels.rs @@ -20,7 +20,7 @@ pub mod ll { } pub struct SDL_PixelFormat { - format: uint32_t, + format: SDL_PixelFormatFlag, palette: *SDL_Pallette, BitsPerPixel: uint8_t, BytesPerPixel: uint8_t, @@ -40,6 +40,44 @@ pub mod ll { refcount: c_int, next: *SDL_PixelFormat } + + pub type SDL_PixelFormatFlag = uint32_t; + pub static SDL_PIXELFORMAT_UNKNOWN: SDL_PixelFormatFlag = 0x0; + pub static SDL_PIXELFORMAT_INDEX1LSB: SDL_PixelFormatFlag = 0x11100100; + pub static SDL_PIXELFORMAT_INDEX1MSB: SDL_PixelFormatFlag = 0x11200100; + pub static SDL_PIXELFORMAT_INDEX4LSB: SDL_PixelFormatFlag = 0x12100400; + pub static SDL_PIXELFORMAT_INDEX4MSB: SDL_PixelFormatFlag = 0x12200400; + pub static SDL_PIXELFORMAT_INDEX8: SDL_PixelFormatFlag = 0x13000801; + pub static SDL_PIXELFORMAT_RGB332: SDL_PixelFormatFlag = 0x14110801; + pub static SDL_PIXELFORMAT_RGB444: SDL_PixelFormatFlag = 0x15120c02; + pub static SDL_PIXELFORMAT_RGB555: SDL_PixelFormatFlag = 0x15130f02; + pub static SDL_PIXELFORMAT_BGR555: SDL_PixelFormatFlag = 0x15530f02; + pub static SDL_PIXELFORMAT_ARGB4444: SDL_PixelFormatFlag = 0x15321002; + pub static SDL_PIXELFORMAT_RGBA4444: SDL_PixelFormatFlag = 0x15421002; + pub static SDL_PIXELFORMAT_ABGR4444: SDL_PixelFormatFlag = 0x15721002; + pub static SDL_PIXELFORMAT_BGRA4444: SDL_PixelFormatFlag = 0x15821002; + pub static SDL_PIXELFORMAT_ARGB1555: SDL_PixelFormatFlag = 0x15331002; + pub static SDL_PIXELFORMAT_RGBA5551: SDL_PixelFormatFlag = 0x15441002; + pub static SDL_PIXELFORMAT_ABGR1555: SDL_PixelFormatFlag = 0x15731002; + pub static SDL_PIXELFORMAT_BGRA5551: SDL_PixelFormatFlag = 0x15841002; + pub static SDL_PIXELFORMAT_RGB565: SDL_PixelFormatFlag = 0x15151002; + pub static SDL_PIXELFORMAT_BGR565: SDL_PixelFormatFlag = 0x15551002; + pub static SDL_PIXELFORMAT_RGB24: SDL_PixelFormatFlag = 0x17101803; + pub static SDL_PIXELFORMAT_BGR24: SDL_PixelFormatFlag = 0x17401803; + pub static SDL_PIXELFORMAT_RGB888: SDL_PixelFormatFlag = 0x16161804; + pub static SDL_PIXELFORMAT_RGBX8888: SDL_PixelFormatFlag = 0x16261804; + pub static SDL_PIXELFORMAT_BGR888: SDL_PixelFormatFlag = 0x16561804; + pub static SDL_PIXELFORMAT_BGRX8888: SDL_PixelFormatFlag = 0x16661804; + pub static SDL_PIXELFORMAT_ARGB8888: SDL_PixelFormatFlag = 0x16362004; + pub static SDL_PIXELFORMAT_RGBA8888: SDL_PixelFormatFlag = 0x16462004; + pub static SDL_PIXELFORMAT_ABGR8888: SDL_PixelFormatFlag = 0x16762004; + pub static SDL_PIXELFORMAT_BGRA8888: SDL_PixelFormatFlag = 0x16862004; + pub static SDL_PIXELFORMAT_ARGB2101010: SDL_PixelFormatFlag = 0x16372004; + pub static SDL_PIXELFORMAT_YV12: SDL_PixelFormatFlag = 0x32315659; + pub static SDL_PIXELFORMAT_IYUV: SDL_PixelFormatFlag = 0x56555949; + pub static SDL_PIXELFORMAT_YUY2: SDL_PixelFormatFlag = 0x32595559; + pub static SDL_PIXELFORMAT_UYVY: SDL_PixelFormatFlag = 0x59565955; + pub static SDL_PIXELFORMAT_YVYU: SDL_PixelFormatFlag = 0x55595659; } #[deriving(Eq)] @@ -54,3 +92,43 @@ impl rand::Rand for Color { else { RGB(rng.gen(), rng.gen(), rng.gen()) } } } + +#[deriving(Eq)] +pub enum PixelFormatFlag { + Unknown = ll::SDL_PIXELFORMAT_UNKNOWN as int, + Index1LSB = ll::SDL_PIXELFORMAT_INDEX1LSB as int, + Index1MSB = ll::SDL_PIXELFORMAT_INDEX1MSB as int, + Index4LSB = ll::SDL_PIXELFORMAT_INDEX4LSB as int, + Index4MSB = ll::SDL_PIXELFORMAT_INDEX4MSB as int, + Index8 = ll::SDL_PIXELFORMAT_INDEX8 as int, + RGB332 = ll::SDL_PIXELFORMAT_RGB332 as int, + RGB444 = ll::SDL_PIXELFORMAT_RGB444 as int, + RGB555 = ll::SDL_PIXELFORMAT_RGB555 as int, + BGR555 = ll::SDL_PIXELFORMAT_BGR555 as int, + ARGB4444 = ll::SDL_PIXELFORMAT_ARGB4444 as int, + RGBA4444 = ll::SDL_PIXELFORMAT_RGBA4444 as int, + ABGR4444 = ll::SDL_PIXELFORMAT_ABGR4444 as int, + BGRA4444 = ll::SDL_PIXELFORMAT_BGRA4444 as int, + ARGB1555 = ll::SDL_PIXELFORMAT_ARGB1555 as int, + RGBA5551 = ll::SDL_PIXELFORMAT_RGBA5551 as int, + ABGR1555 = ll::SDL_PIXELFORMAT_ABGR1555 as int, + BGRA5551 = ll::SDL_PIXELFORMAT_BGRA5551 as int, + RGB565 = ll::SDL_PIXELFORMAT_RGB565 as int, + BGR565 = ll::SDL_PIXELFORMAT_BGR565 as int, + RGB24 = ll::SDL_PIXELFORMAT_RGB24 as int, + BGR24 = ll::SDL_PIXELFORMAT_BGR24 as int, + RGB888 = ll::SDL_PIXELFORMAT_RGB888 as int, + RGBX8888 = ll::SDL_PIXELFORMAT_RGBX8888 as int, + BGR888 = ll::SDL_PIXELFORMAT_BGR888 as int, + BGRX8888 = ll::SDL_PIXELFORMAT_BGRX8888 as int, + ARGB8888 = ll::SDL_PIXELFORMAT_ARGB8888 as int, + RGBA8888 = ll::SDL_PIXELFORMAT_RGBA8888 as int, + ABGR8888 = ll::SDL_PIXELFORMAT_ABGR8888 as int, + BGRA8888 = ll::SDL_PIXELFORMAT_BGRA8888 as int, + ARGB2101010 = ll::SDL_PIXELFORMAT_ARGB2101010 as int, + YV12 = ll::SDL_PIXELFORMAT_YV12 as int, + IYUV = ll::SDL_PIXELFORMAT_IYUV as int, + YUY2 = ll::SDL_PIXELFORMAT_YUY2 as int, + UYVY = ll::SDL_PIXELFORMAT_UYVY as int, + YVYU = ll::SDL_PIXELFORMAT_YVYU as int +} diff --git a/src/video.rs b/src/video.rs index 3157eabc..aa43b424 100644 --- a/src/video.rs +++ b/src/video.rs @@ -6,6 +6,7 @@ use std::vec; use rect::Rect; use surface::Surface; +use pixels; use get_error; @@ -163,8 +164,8 @@ pub mod ll { externfn!(fn SDL_GL_GetProcAddress(proc: *c_char)) externfn!(fn SDL_GL_UnloadLibrary()) externfn!(fn SDL_GL_ExtensionSupported(extension: *c_char) -> SDL_bool) - externfn!(fn SDL_GL_SetAttribute(attr: c_int, value: c_int) -> c_int) //attr should be SDL_GLAttr - externfn!(fn SDL_GL_GetAttribute(attr: c_int, value: *c_int) -> c_int) //attr should be SDL_GLAttr + externfn!(fn SDL_GL_SetAttribute(attr: SDL_GLattr, value: c_int) -> c_int) + externfn!(fn SDL_GL_GetAttribute(attr: SDL_GLattr, value: *c_int) -> c_int) externfn!(fn SDL_GL_CreateContext(window: *SDL_Window) -> SDL_GLContext) externfn!(fn SDL_GL_MakeCurrent(window: *SDL_Window, context: SDL_GLContext) -> c_int) externfn!(fn SDL_GL_GetCurrentWindow() -> *SDL_Window) @@ -418,7 +419,9 @@ impl Window { } } - /*pub fn SDL_GetWindowPixelFormat(window: *SDL_Window) -> uint32_t; */ //TODO: Implement me! + pub fn get_window_pixel_format(&self) -> pixels::PixelFormatFlag { + unsafe{ cast::transmute(ll::SDL_GetWindowPixelFormat(self.raw) as u64) } + } pub fn get_id(&self) -> u32 { unsafe { ll::SDL_GetWindowID(self.raw) } @@ -750,13 +753,13 @@ pub fn gl_extension_supported(extension: &str) -> bool { } pub fn gl_set_attribute(attr: GLAttr, value: int) -> bool { - unsafe { ll::SDL_GL_SetAttribute(attr as c_int, value as c_int) == 0 } + unsafe { ll::SDL_GL_SetAttribute(cast::transmute(attr as u64), value as c_int) == 0 } } pub fn gl_get_attribute(attr: GLAttr) -> Result { let out: c_int = 0; - let result = unsafe { ll::SDL_GL_GetAttribute(attr as c_int, &out) } == 0; + let result = unsafe { ll::SDL_GL_GetAttribute(cast::transmute(attr as u64), &out) } == 0; if result { Ok(out as int) } else {