Re: [R] rgl: exporting to pdf or png does not work

From: Gaspard Lequeux <Gaspard.Lequeux.at_at_biomath.ugent.be>
Date: Fri 25 Aug 2006 - 06:34:25 EST

Hej,

On Thu, 24 Aug 2006, Duncan Murdoch wrote:

> On 8/24/2006 11:19 AM, Gaspard Lequeux wrote:

>>
>> On Wed, 23 Aug 2006, Duncan Murdoch wrote:
>>
>>> On 8/23/2006 5:15 PM, Gaspard Lequeux wrote:
>>>
>>>> When exporting a image from rgl, the following error is encountered:
>>>>
>>>>> rgl.postscript('testing.pdf', fmt="pdf")
>>>> RGL: ERROR: can't bind glx context to window
>>>> RGL: ERROR: can't bind glx context to window
>>>> Warning messages:
>>>> 1: X11 protocol error: GLXBadContextState
>>>> 2: X11 protocol error: GLXBadContextState
>>>>
>>>> The pdf file is created and is readable, but all the labels are gone.
>>>>
>>>> Taking a snapshot (to png) gives 'failed' and no file is created.
>>>>
>>>> Version of rgl used: 0.67-2 (2006-07-11)
>>>> Version of R used: R 2.3.1; i486-pc-linux-gnu; 2006-07-13 01:31:16;
>>>> Running Debian GNU/Linux testing (Etch).
>>>
>>> That looks like an X11 error to me, not something that I'm very likely
>>> to be able to fix. If you can debug the error, it would be helpful.
>>
>> Actually after upgrading everything (debian testing (etch)) and restarting
>> X, I didn't get that error anymore. It was worse: R crashed:
>>
>>> library(rgl);triangles3d(c(1,,2,3),c(1,2,4),c(1,3,5));rgl.postscript('testing.pdf','pdf')
>> X Error of failed request: GLXBadContextState
>> Major opcode of failed request: 142 (GLX)
>> Minor opcode of failed request: 5 (X_GLXMakeCurrent)
>> Serial number of failed request: 85
>> Current serial number in output stream: 85
>> glequeux@toidi:~/seqanal$
>>
>>
>> I downloaded the source package (debian testing (etch), rgl-0.67-2).
>>
>> In rgl-0.67-2/src/ I changed the following files:
>>
>> rglview.cpp, around line 587. Commenting the function call gl2psBeginPage
>> removed the crash (but also no pdf output...)
>>
>> I enabled this function again and went to gl2ps.c, to the function
>> gl2psBeginPage. At the end of that function, around line 4426, commenting
>> out the line
>> glRenderMode(GL_FEEDBACK);
>> removes the R crash, but of course still no pdf output (well, only the
>> background).
>>
>> GL_FEEDBACK is defined in /usr/include/GL/gl.h as:
>>
>> /* Render Mode */
>> #define GL_FEEDBACK 0x1C01
>> #define GL_RENDER 0x1C00
>> #define GL_SELECT 0x1C02
>>
>> Trying glRenderMode(GL_RENDER) removed the crash, but still only the
>> background in the pdf.
>>
>> If someone has some suggestions about what to do next...
>
> gl2ps is a separate project, whose source has been included into rgl.
> You can see the gl2ps project page at http://www.geuz.org/gl2ps/.
>
> We're using version 1.2.2, which is a couple of years old.  The current
> stable release of gl2ps is 1.3.1.  It might fix your problem.
>
> I don't know if we modified gl2ps.c or gl2ps.h when they were included,
> but they haven't been modified since.  (Daniel put them in, based on a
> patch from Albrecht Gebhardt, according to the log.)
>
> It would be helpful to know:
>
> 1.  Is the rgl source identical to 1.2.2?

Yes. The version of gl2ps in rgl is identical to gl2ps version 1.2.2.

> 2. Does rgl work if 1.3.1 is dropped in instead?

No:

In version 1.3.1:

#define GL2PS_PS  0
#define GL2PS_EPS 1
#define GL2PS_TEX 2
#define GL2PS_PDF 3
#define GL2PS_SVG 4
#define GL2PS_PGF 5

while in version 1.2.2:

#define GL2PS_PS  1
#define GL2PS_EPS 2
#define GL2PS_TEX 3
#define GL2PS_PDF 4

Thus rgl.postscript('probeer.pdf','tex') should be used to generate a pdf. The pdf has still no characters (axes annotations).

In R/enum.R

The last line (line 54)

rgl.enum (postscripttype, ps=1, eps=2, tex=3, pdf=4)

should be

rgl.enum (postscripttype, ps=0, eps=1, tex=2, pdf=3)

and mayebe add svg and pgf...

> 3. Does 1.3.1 fix the bug you're seeing?

No. Same error.

The error occurs also on ubuntu dapper. On that ubuntu machine, when installing the libgl1-mesa-swrast, the packages libgl1-mesa libgl1-mesa-dri and x-window-system-core are removed. rgl.postscript doesn't produce any errors anymore, the pdf is created but no text (axes decorations) is written to the pdf.

On debian testing, libgl1-mesa-swx11 can be installed. This removes the follwing packages:

freeglut3-dev libgl1-mesa-dev libgl1-mesa-dri libgl1-mesa-glx libglitz-glx1-dev libglitz1-dev libglu1-mesa-dev libglui-dev libglut3-dev x-window-system-core xlibmesa-gl-dev xorg

but R doesn't crash anymore and the figure is written to file (still without axes annotations).

Reinstal libgl1-mesa-glx removes libgl1-mesa-swx11 and the R crash returns.

So it seems the bug is really triggered by libgl1-mesa. I filled in a bug report for the debian package libgl1-mesa-glx.

> I'll look into these at some point, but probably not this week.

Thanks. No hurry however, as I can still use the classical screenshots. The figures will probable not have to be published, as the expected results are not attained.

/Gaspard



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. Received on Fri Aug 25 06:39:40 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Sat 26 Aug 2006 - 06:22:45 EST.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.