Unify WindowBuilder and HeadlessRendererBuilder for easier implementations

This commit is contained in:
Pierre Krieger 2014-12-28 15:08:41 +01:00
parent fb42768a14
commit b9710f05a9
8 changed files with 76 additions and 61 deletions

View file

@ -3,11 +3,7 @@ use std::ptr;
use libc;
use {CreationError, Event};
#[cfg(feature = "window")]
use WindowBuilder;
#[cfg(feature = "headless")]
use HeadlessRendererBuilder;
use BuilderAttribs;
pub use self::monitor::{MonitorID, get_available_monitors, get_primary_monitor};
@ -19,15 +15,13 @@ mod init;
mod monitor;
///
#[cfg(feature = "headless")]
pub struct HeadlessContext(Window);
#[cfg(feature = "headless")]
impl HeadlessContext {
/// See the docs in the crate root file.
pub fn new(builder: HeadlessRendererBuilder) -> Result<HeadlessContext, CreationError> {
let HeadlessRendererBuilder { dimensions, gl_version, gl_debug } = builder;
init::new_window(Some(dimensions), "".to_string(), None, gl_version, gl_debug, false, true,
pub fn new(builder: BuilderAttribs) -> Result<HeadlessContext, CreationError> {
let BuilderAttribs { dimensions, gl_version, gl_debug, .. } = builder;
init::new_window(dimensions, "".to_string(), None, gl_version, gl_debug, false, true,
None, None)
.map(|w| HeadlessContext(w))
}
@ -83,14 +77,13 @@ pub struct Window {
unsafe impl Send for Window {}
unsafe impl Sync for Window {}
#[cfg(feature = "window")]
impl Window {
/// See the docs in the crate root file.
pub fn new(builder: WindowBuilder) -> Result<Window, CreationError> {
let WindowBuilder { dimensions, title, monitor, gl_version,
gl_debug, vsync, visible, sharing, multisampling } = builder;
pub fn new(builder: BuilderAttribs) -> Result<Window, CreationError> {
let BuilderAttribs { dimensions, title, monitor, gl_version,
gl_debug, vsync, visible, sharing, multisampling, .. } = builder;
init::new_window(dimensions, title, monitor, gl_version, gl_debug, vsync,
!visible, sharing.map(|w| init::ContextHack(w.window.context)),
!visible, sharing.map(|w| init::ContextHack(w.context)),
multisampling)
}
}