mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-23 22:01:31 +11:00
Implement enumerate_arb_pixel_formats
This commit is contained in:
parent
d1bc85c011
commit
950fd58b77
4
build.rs
4
build.rs
|
@ -22,7 +22,9 @@ fn main() {
|
||||||
khronos_api::WGL_XML,
|
khronos_api::WGL_XML,
|
||||||
vec![
|
vec![
|
||||||
"WGL_ARB_create_context".to_string(),
|
"WGL_ARB_create_context".to_string(),
|
||||||
"WGL_EXT_swap_control".to_string()
|
"WGL_EXT_swap_control".to_string(),
|
||||||
|
"WGL_ARB_pixel_format".to_string(),
|
||||||
|
"WGL_ARB_framebuffer_sRGB".to_string(),
|
||||||
],
|
],
|
||||||
"1.0", "core", &mut file).unwrap();
|
"1.0", "core", &mut file).unwrap();
|
||||||
}
|
}
|
||||||
|
|
|
@ -462,6 +462,52 @@ fn enumerate_native_pixel_formats(hdc: winapi::HDC) -> Vec<(PixelFormat, libc::c
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
fn enumerate_arb_pixel_formats(extra: &gl::wgl_extra::Wgl, hdc: winapi::HDC) -> Vec<PixelFormat> {
|
fn enumerate_arb_pixel_formats(extra: &gl::wgl_extra::Wgl, hdc: winapi::HDC)
|
||||||
unimplemented!()
|
-> Vec<(PixelFormat, libc::c_int)>
|
||||||
|
{
|
||||||
|
let get_info = |index: u32, attrib: u32| {
|
||||||
|
let mut value = unsafe { mem::uninitialized() };
|
||||||
|
unsafe { extra.GetPixelFormatAttribivARB(hdc as *const libc::c_void, index as libc::c_int,
|
||||||
|
0, 1, [attrib as libc::c_int].as_ptr(),
|
||||||
|
&mut value) };
|
||||||
|
value as u32
|
||||||
|
};
|
||||||
|
|
||||||
|
// getting the number of formats
|
||||||
|
// the `1` is ignored
|
||||||
|
let num = get_info(1, gl::wgl_extra::NUMBER_PIXEL_FORMATS_ARB);
|
||||||
|
|
||||||
|
let mut result = Vec::new();
|
||||||
|
|
||||||
|
for index in (0 .. num) {
|
||||||
|
if get_info(index, gl::wgl_extra::DRAW_TO_WINDOW_ARB) == 0 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if get_info(index, gl::wgl_extra::SUPPORT_OPENGL_ARB) == 0 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if get_info(index, gl::wgl_extra::ACCELERATION_ARB) == gl::wgl_extra::NO_ACCELERATION_ARB {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if get_info(index, gl::wgl_extra::PIXEL_TYPE_ARB) != gl::wgl_extra::TYPE_RGBA_ARB {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
result.push((PixelFormat {
|
||||||
|
red_bits: get_info(index, gl::wgl_extra::RED_BITS_ARB) as u8,
|
||||||
|
green_bits: get_info(index, gl::wgl_extra::GREEN_BITS_ARB) as u8,
|
||||||
|
blue_bits: get_info(index, gl::wgl_extra::BLUE_BITS_ARB) as u8,
|
||||||
|
alpha_bits: get_info(index, gl::wgl_extra::ALPHA_BITS_ARB) as u8,
|
||||||
|
depth_bits: get_info(index, gl::wgl_extra::DEPTH_BITS_ARB) as u8,
|
||||||
|
stencil_bits: get_info(index, gl::wgl_extra::STENCIL_BITS_ARB) as u8,
|
||||||
|
stereoscopy: get_info(index, gl::wgl_extra::STEREO_ARB) != 0,
|
||||||
|
double_buffer: get_info(index, gl::wgl_extra::DOUBLE_BUFFER_ARB) != 0,
|
||||||
|
multisampling: None, // FIXME:
|
||||||
|
srgb: false, // FIXME:
|
||||||
|
}, index as libc::c_int));
|
||||||
|
}
|
||||||
|
|
||||||
|
result
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue