Merge pull request #115 from tomaka/detect-osmesa-errors

Detect OSMesa errors
This commit is contained in:
tomaka 2014-11-14 16:03:36 +01:00
commit 28227a2142
2 changed files with 13 additions and 5 deletions

View file

@ -1,5 +1,5 @@
use HeadlessRendererBuilder; use HeadlessRendererBuilder;
use CreationError; use {CreationError, OsError};
use libc; use libc;
use std::{mem, ptr}; use std::{mem, ptr};
use super::ffi; use super::ffi;
@ -18,16 +18,23 @@ impl HeadlessContext {
height: builder.dimensions.1, height: builder.dimensions.1,
buffer: Vec::from_elem(builder.dimensions.0 * builder.dimensions.1, unsafe { mem::uninitialized() }), buffer: Vec::from_elem(builder.dimensions.0 * builder.dimensions.1, unsafe { mem::uninitialized() }),
context: unsafe { context: unsafe {
// TODO: check errors let ctxt = ffi::OSMesaCreateContext(0x1908, ptr::null());
ffi::OSMesaCreateContext(0x1908, ptr::null()) if ctxt.is_null() {
return Err(OsError("OSMesaCreateContext failed".to_string()));
}
ctxt
} }
}) })
} }
pub unsafe fn make_current(&self) { pub unsafe fn make_current(&self) {
ffi::OSMesaMakeCurrent(self.context, let ret = ffi::OSMesaMakeCurrent(self.context,
self.buffer.as_ptr() as *mut libc::c_void, self.buffer.as_ptr() as *mut libc::c_void,
0x1401, self.width as libc::c_int, self.height as libc::c_int); 0x1401, self.width as libc::c_int, self.height as libc::c_int);
if ret == 0 {
panic!("OSMesaMakeCurrent failed")
}
} }
pub fn get_proc_address(&self, addr: &str) -> *const () { pub fn get_proc_address(&self, addr: &str) -> *const () {

View file

@ -32,6 +32,7 @@ fn main() {
gl.ReadPixels(0, 0, 1, 1, gl::RGBA, gl::UNSIGNED_BYTE, std::mem::transmute(&mut value)); gl.ReadPixels(0, 0, 1, 1, gl::RGBA, gl::UNSIGNED_BYTE, std::mem::transmute(&mut value));
assert!(value == (0, 255, 0, 255) || value == (0, 64, 0, 255) || assert!(value == (0, 255, 0, 255) || value == (0, 64, 0, 255) ||
value == (0, 64, 0, 255) || value == (0, 64, 0, 0)); value == (0, 64, 0, 255) || value == (0, 64, 0, 0),
"value is: {}", value);
} }
} }