mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-24 06:11:30 +11:00
Add support for specific OpenGL version for Win32
This commit is contained in:
parent
13c73cce5e
commit
8c074af9fc
11
src/lib.rs
11
src/lib.rs
|
@ -29,6 +29,7 @@ pub struct WindowBuilder {
|
||||||
dimensions: (uint, uint),
|
dimensions: (uint, uint),
|
||||||
title: String,
|
title: String,
|
||||||
monitor: Option<winimpl::MonitorID>,
|
monitor: Option<winimpl::MonitorID>,
|
||||||
|
gl_version: Option<(uint, uint)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WindowBuilder {
|
impl WindowBuilder {
|
||||||
|
@ -38,6 +39,7 @@ impl WindowBuilder {
|
||||||
dimensions: (1024, 768),
|
dimensions: (1024, 768),
|
||||||
title: String::new(),
|
title: String::new(),
|
||||||
monitor: None,
|
monitor: None,
|
||||||
|
gl_version: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,6 +59,15 @@ impl WindowBuilder {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Requests to use a specific OpenGL version.
|
||||||
|
///
|
||||||
|
/// Version is a (major, minor) pair. For example to request OpenGL 3.3
|
||||||
|
/// you would pass `(3, 3)`.
|
||||||
|
pub fn with_gl_version(mut self, version: (uint, uint)) -> WindowBuilder {
|
||||||
|
self.gl_version = Some(version);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Builds the window.
|
/// Builds the window.
|
||||||
///
|
///
|
||||||
/// Error should be very rare and only occur in case of permission denied, incompatible system,
|
/// Error should be very rare and only occur in case of permission denied, incompatible system,
|
||||||
|
|
|
@ -365,6 +365,17 @@ pub static VK_NONAME: WPARAM = 0xFC;
|
||||||
pub static VK_PA1: WPARAM = 0xFD;
|
pub static VK_PA1: WPARAM = 0xFD;
|
||||||
pub static VK_OEM_CLEAR: WPARAM = 0xFE;
|
pub static VK_OEM_CLEAR: WPARAM = 0xFE;
|
||||||
|
|
||||||
|
// ?
|
||||||
|
pub static WGL_CONTEXT_DEBUG_BIT_ARB: libc::c_int = 0x00000001;
|
||||||
|
pub static WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB: libc::c_int = 0x00000002;
|
||||||
|
pub static WGL_CONTEXT_MAJOR_VERSION_ARB: libc::c_int = 0x2091;
|
||||||
|
pub static WGL_CONTEXT_MINOR_VERSION_ARB: libc::c_int = 0x2092;
|
||||||
|
pub static WGL_CONTEXT_LAYER_PLANE_ARB: libc::c_int = 0x2093;
|
||||||
|
pub static WGL_CONTEXT_FLAGS_ARB: libc::c_int = 0x2094;
|
||||||
|
pub static WGL_CONTEXT_PROFILE_MASK_ARB: libc::c_int = 0x9126;
|
||||||
|
pub static WGL_CONTEXT_CORE_PROFILE_BIT_ARB: libc::c_int = 0x00000001;
|
||||||
|
pub static WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB: libc::c_int = 0x00000002;
|
||||||
|
|
||||||
// messages
|
// messages
|
||||||
pub static WM_LBUTTONDOWN: UINT = 0x0201;
|
pub static WM_LBUTTONDOWN: UINT = 0x0201;
|
||||||
pub static WM_LBUTTONUP: UINT = 0x0202;
|
pub static WM_LBUTTONUP: UINT = 0x0202;
|
||||||
|
|
|
@ -250,14 +250,22 @@ pub fn new_window(builder: WindowBuilder) -> Result<Window, String> {
|
||||||
let context = {
|
let context = {
|
||||||
use libc;
|
use libc;
|
||||||
|
|
||||||
let attributes: [libc::c_int, ..1] = [
|
let mut attributes = Vec::new();
|
||||||
0
|
|
||||||
];
|
if builder.gl_version.is_some() {
|
||||||
|
let version = builder.gl_version.as_ref().unwrap();
|
||||||
|
attributes.push(ffi::WGL_CONTEXT_MAJOR_VERSION_ARB);
|
||||||
|
attributes.push(version.val0() as libc::c_int);
|
||||||
|
attributes.push(ffi::WGL_CONTEXT_MINOR_VERSION_ARB);
|
||||||
|
attributes.push(version.val1() as libc::c_int);
|
||||||
|
}
|
||||||
|
|
||||||
|
attributes.push(0);
|
||||||
|
|
||||||
let ctxt = unsafe {
|
let ctxt = unsafe {
|
||||||
match create_context_attribs {
|
match create_context_attribs {
|
||||||
None => ffi::wglCreateContext(hdc),
|
None => ffi::wglCreateContext(hdc),
|
||||||
Some(ptr) => ptr(hdc, ptr::mut_null(), attributes.as_ptr())
|
Some(ptr) => ptr(hdc, ptr::mut_null(), attributes.as_slice().as_ptr())
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue