[R] rgl: exporting to pdf or png does not work
Duncan Murdoch
murdoch at stats.uwo.ca
Fri Aug 25 21:44:20 CEST 2006
On 8/24/2006 4:34 PM, Gaspard Lequeux wrote:
> 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 at 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.
Thanks for your work on this. I'll put the gl2ps 1.3.1 code into rgl
with the changes you found.
Duncan Murdoch
More information about the R-help
mailing list