aboutsummaryrefslogtreecommitdiffstats
path: root/src/api/cocoa/headless.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/cocoa/headless.rs')
-rw-r--r--src/api/cocoa/headless.rs52
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);
- }
- }
-}