From 04977ae20d474cfd8d8db1a9ba50904dbbfab488 Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Wed, 31 Jan 2018 10:33:54 +1000 Subject: [PATCH] Add a workaround for headless output sometimes being blank. I *think* this is a bug in OSMesa, as the fix here makes no sense to me. But nonetheless, this change does seem to reliably fix the headless output issues as reported. Fixes #18606. --- components/compositing/compositor.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs index 304b523c87b..e15f3ff2603 100644 --- a/components/compositing/compositor.rs +++ b/components/compositing/compositor.rs @@ -1408,6 +1408,14 @@ impl IOCompositor { width: usize, height: usize) -> RgbImage { + // For some reason, OSMesa fails to render on the 3rd + // attempt in headless mode, under some conditions. + // I think this can only be some kind of synchronization + // bug in OSMesa, but explicitly un-binding any vertex + // array here seems to work around that bug. + // See https://github.com/servo/servo/issues/18606. + self.gl.bind_vertex_array(0); + let mut pixels = self.gl.read_pixels(0, 0, width as gl::GLsizei, height as gl::GLsizei,