diff options
Diffstat (limited to 'src/api/cocoa/headless.rs')
-rw-r--r-- | src/api/cocoa/headless.rs | 52 |
1 files changed, 6 insertions, 46 deletions
diff --git a/src/api/cocoa/headless.rs b/src/api/cocoa/headless.rs index d0d59f3..7fe2046 100644 --- a/src/api/cocoa/headless.rs +++ b/src/api/cocoa/headless.rs @@ -4,8 +4,6 @@ use CreationError::OsError; use GlAttributes; use GlContext; use PixelFormatRequirements; -use std::os::raw::c_void; -use std::ptr; use core_foundation::base::TCFType; use core_foundation::string::CFString; @@ -13,13 +11,7 @@ use core_foundation::bundle::{CFBundleGetBundleWithIdentifier, CFBundleGetFuncti use cocoa::base::{id, nil}; use cocoa::appkit::*; use PixelFormat; - -mod gl { - include!(concat!(env!("OUT_DIR"), "/gl_bindings.rs")); -} - -static mut framebuffer: u32 = 0; -static mut texture: u32 = 0; +use api::cocoa::helpers; pub struct HeadlessContext { width: u32, @@ -28,16 +20,12 @@ pub struct HeadlessContext { } impl HeadlessContext { - pub fn new((width, height): (u32, u32), _pf_reqs: &PixelFormatRequirements, - _opengl: &GlAttributes<&HeadlessContext>) -> Result<HeadlessContext, CreationError> + pub fn new((width, height): (u32, u32), pf_reqs: &PixelFormatRequirements, + opengl: &GlAttributes<&HeadlessContext>) -> Result<HeadlessContext, CreationError> { let context = unsafe { - let attributes = [ - NSOpenGLPFAAccelerated as u32, - NSOpenGLPFAAllowOfflineRenderers as u32, - NSOpenGLPFADoubleBuffer as u32, - 0 - ]; + + let attributes = try!(helpers::build_nsattributes(pf_reqs, opengl)); let pixelformat = NSOpenGLPixelFormat::alloc(nil).initWithAttributes_(&attributes); if pixelformat == nil { @@ -56,9 +44,6 @@ impl HeadlessContext { context: context, }; - // Load the function pointers as we need them to create the FBO - gl::load_with(|s| headless.get_proc_address(s) as *const c_void); - Ok(headless) } } @@ -66,22 +51,6 @@ impl HeadlessContext { impl GlContext for HeadlessContext { unsafe fn make_current(&self) -> Result<(), ContextError> { self.context.makeCurrentContext(); - - gl::GenFramebuffersEXT(1, &mut framebuffer); - gl::BindFramebufferEXT(gl::FRAMEBUFFER_EXT, framebuffer); - gl::GenTextures(1, &mut texture); - gl::BindTexture(gl::TEXTURE_2D, texture); - gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_MAG_FILTER, gl::LINEAR as i32); - gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_MIN_FILTER, gl::LINEAR as i32); - gl::TexImage2D(gl::TEXTURE_2D, 0, gl::RGBA8 as i32, self.width as i32, self.height as i32, - 0, gl::RGBA, gl::UNSIGNED_BYTE, ptr::null()); - gl::FramebufferTexture2DEXT(gl::FRAMEBUFFER_EXT, gl::COLOR_ATTACHMENT0_EXT, - gl::TEXTURE_2D, texture, 0); - let status = gl::CheckFramebufferStatusEXT(gl::FRAMEBUFFER_EXT); - if status != gl::FRAMEBUFFER_COMPLETE_EXT { - panic!("Error while creating the framebuffer"); - } - Ok(()) } @@ -105,6 +74,7 @@ impl GlContext for HeadlessContext { #[inline] fn swap_buffers(&self) -> Result<(), ContextError> { + unsafe { self.context.flushBuffer(); } Ok(()) } @@ -121,13 +91,3 @@ impl GlContext for HeadlessContext { unsafe impl Send for HeadlessContext {} unsafe impl Sync for HeadlessContext {} - -impl Drop for HeadlessContext { - #[inline] - fn drop(&mut self) { - unsafe { - gl::DeleteTextures(1, &texture); - gl::DeleteFramebuffersEXT(1, &framebuffer); - } - } -} |