On 19/07/2014, 10:31 AM, Simon Urbanek wrote: > > On Jul 19, 2014, at 6:05 AM, Duncan Murdoch <murdoch.dun...@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.dun...@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@r-project.org >>>>> https://stat.ethz.ch/mailman/listinfo/r-sig-mac >>>>> >>>> >>> >> > _______________________________________________ R-SIG-Mac mailing list R-SIG-Mac@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-mac