I'm working on the initialization code for rgl, especially for the case
when it is running remotely and the user is connecting using X11.
On some machines, this fails: I now understand that's because the local
machine needs to enable "indirect GLX" (IGLX) for it to succeed, and by
default most current machines have IGLX disabled. (It can be a security
risk to enable it.)
Failure looks like this (with the current CRAN version of rgl 0.100.47,
and the remote system running Ubuntu, my local system running MacOS):
> library(rgl)
> open3d()
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error of failed request: GLXBadContext
Major opcode of failed request: 149 (GLX)
Minor opcode of failed request: 6 (X_GLXIsDirect)
Serial number of failed request: 42
Current serial number in output stream: 41
I end up booted right out of R. I now know how to fix that, and will
upload an update to CRAN in due course.
On MacOS I can enable IGLX by running
defaults write org.macosforge.xquartz.X11 enable_iglx -bool true
and restarting XQuartz. When I do that, I see this (same setup as before):
> library(rgl)
> open3d()
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
glX
1
Now I want to suppress those two libGL messages, and I'm having trouble
figuring out how to do it. If I redirect stderr when I start R, they
are redirected: but if I do it after starting R, they aren't:
> library(rgl)
> capture.output(open3d(), type = "message")
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
glX
1
character(0)
(capture.output with type = "output" gets c("glX", "1"), but leaves the
libGL messages printing to the console. sink() behaves similarly.)
So how do I capture stderr (or, off topic here, how do I get libGL to be
quiet)?
Duncan Murdoch
______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel