[R-SIG-Mac] rgl for R-devel

Duncan Murdoch murdoch.duncan at gmail.com
Sun Jul 20 03:51:51 CEST 2014


On 19/07/2014, 10:31 AM, Simon Urbanek wrote:
> 
> On Jul 19, 2014, at 6:05 AM, Duncan Murdoch <murdoch.duncan at gmail.com> wrote:
> 
>> On 19/07/2014, 4:42 AM, Duncan Murdoch wrote:
>>> On 18/07/2014, 8:18 PM, Simon Urbanek wrote:
>>>> Duncan,
>>>>
>>>> I didn't look at the code, but the approach seems strange - if you use something from the GLKit framework then the include should be
>>>>
>>>> #include <GLKit/GLKMathUtils.h>
>>>>
>>>> without specifying -I... You should never have the need to include the "Headers" directory directly (other than cases where the framework contains non-framework headers like R does) since frameworks are searched automatically when referenced.
>>>
>>> Thanks.  I forget where that code came from.  Obviously I don't know
>>> much about OSX programming.
>>>
>>> One other question that might be simple, or might not:  I'm seeing
>>> problems in Cocoa because after a user closes an rgl window (by clicking
>>> on the x on the frame), the cleanup code is not being called.  rgl declares
>>>
>>> @interface GLView : NSOpenGLView {
>>>  rgl::OSXWindowImpl *impl;
>>>  NSUInteger lastModifierFlags;
>>> }
>>>
>>> - (id)initWithFrame:(NSRect)frame
>>>        pixelFormat:(NSOpenGLPixelFormat *)pixelFormat
>>>               impl:(rgl::OSXWindowImpl *)impl;
>>> @end
>>>
>>> and then in the implementation section has the cleanup code in
>>>
>>> - (void)dealloc
>>> {
>>>  if (impl) impl->on_dealloc();
>>>  [super dealloc];
>>> }
>>>
>>> but as far as I can tell this isn't being called when the user closes
>>> the window.  Is there some other method that is called to allow cleanup?
>>> The Apple docs probably talk about this somewhere, but I haven't found
>>> where...
>>>
>>
>> More precisely:  this isn't being called *immediately* when the window
>> is closed.  It is called a little bit later, but in some circumstances
>> that's too late, because the user can ask rgl to do something in between
>> and it tries to make changes to a window that isn't there any more.
>>
> 
> Yes, dealloc is asynchronous, because it gets called only when the object is actually released which is only after garbage collection (or allocation pool flush). For immediate action I would recommend windowShouldClose: (can cancel) or windowWillClose: (cannot cancel) window delegate methods.

It makes sense to use windowWillClose here, and I've got an NSWindow
object that could receive the message, but I don't know Objective C
(++?) well enough to know how to tell it to do so.  Do I need to create
a new interface to it?  I've mostly been on planes today so I haven't
had much time to Google a solution, but the Apple docs don't seem to
give any good examples of this.

BTW, thanks for the fix to the headers, and thanks Roger for testing them.

Duncan

> Cheers,
> Simon
> 
> 
>> Duncan Murdoch
>>
>>> Duncan Murdoch
>>>
>>>>
>>>> @Roger: on 10.9.2 (darwin 13.1.0 - which matches your build) I see
>>>> $ ls -l /System/Library/Frameworks/GLKit.framework/Headers/
>>>> total 16
>>>> -rw-r--r--  1 root  wheel   7327 Apr 11 05:49 GLKBaseEffect.h
>>>> -rw-r--r--  1 root  wheel   1435 Apr 11 05:49 GLKEffectProperty.h
>>>> [...]
>>>> -rw-r--r--  1 root  wheel   1224 Apr 11 05:49 GLKMathUtils.h
>>>> [...]
>>>>
>>>> Cheers,
>>>> Simon
>>>>
>>>>
>>>> On Jul 18, 2014, at 9:07 PM, Duncan Murdoch <murdoch.duncan at gmail.com> wrote:
>>>>
>>>>> On 18/07/2014, 4:41 PM, Roger Koenker wrote:
>>>>>> I'm trying to
>>>>>>
>>>>>> install.packages("rgl", type = "source")
>>>>>>
>>>>>> with
>>>>>>
>>>>>>> sessionInfo()
>>>>>> R Under development (unstable) (2014-07-09 r66111)
>>>>>> Platform: x86_64-apple-darwin13.1.0 (64-bit)
>>>>>>
>>>>>> locale:
>>>>>> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
>>>>>>
>>>>>> attached base packages:
>>>>>> [1] stats     graphics  grDevices utils     datasets  methods   base     
>>>>>>
>>>>>> other attached packages:
>>>>>> [1] quantreg_5.05 SparseM_1.05 
>>>>>>
>>>>>> loaded via a namespace (and not attached):
>>>>>> [1] tcltk_3.2.0 tools_3.2.0
>>>>>>
>>>>>> and seeing (eventually):
>>>>>>
>>>>>> clang++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/System/Library/Frameworks/GLKit.framework/Headers -I/System/Library/Frameworks/OpenGL.framework/Headers  -DHAVE_PNG_H -I/usr/local/include/libpng12 -I/usr/X11/include -DDarwin -DNO_GL_PREFIX -I/usr/X11R6/include -DHAVE_FREETYPE -Iext/ftgl -I/opt/X11/include/freetype2 -Iext -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include   -Wall -mtune=core2 -g -O2  -fPIC  -Wall -mtune=core2 -g -O2  -c platform.cpp -o platform.o
>>>>>> platform.cpp:16:10: fatal error: 'GLKMathUtils.h' file not found
>>>>>> #include <GLKMathUtils.h> 
>>>>>>        ^
>>>>>> 1 error generated.
>>>>>> make: *** [platform.o] Error 1
>>>>>> ERROR: compilation failed for package ‘rgl’
>>>>>>
>>>>>> I do have a GLKit.framework  but there is no Headers subdir ...  
>>>>>>
>>>>>
>>>>> What OSX version is that?  There were warnings about deprecated code in
>>>>> rgl, so I switched to using GLKMathUtils, but apparently the configure
>>>>> script isn't quite right.
>>>>>
>>>>> Duncan Murdoch
>>>>>
>>>>> _______________________________________________
>>>>> R-SIG-Mac mailing list
>>>>> R-SIG-Mac at r-project.org
>>>>> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>>>>>
>>>>
>>>
>>
>



More information about the R-SIG-Mac mailing list