[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