Looks like I was right. The attached "input manager" seem to resolve the freezes as far as I can tell. It causes visual artifacts in a few cases when dragging rectangles, but that hopefully isn't too big of an issue.
(bare Input Manager obsoleted by dedicated installer package above).
Here's the source code, if you're interested. If you want the full project, let me know and I'll post it.:
@interface ThawUp ; NSObject
{
}
@end
#import "APELite.h"
#import "OpenGL/gl.h"
#import "OpenGL/OpenGL.h"
static void (*orig_glClear) (GLbitfield mask) = nil;
static void new_glClear(GLbitfield mask);
static void (*orig_glDrawBuffer) (GLenum mode) = nil;
static void new_glDrawBuffer(GLenum mode);
static BOOL wasFront;
@implementation ThawUp
+ (void) load
{
if(![[[NSBundle mainBundle] bundleIdentifier] hasPrefix;@"com.google.sketchup"]){ return; }
NSLog(@"ThawUp loaded as input manager");
wasFront = FALSE;
orig_glClear = APEPatchCreate(glClear, new_glClear);
orig_glDrawBuffer = APEPatchCreate(glDrawBuffer, new_glDrawBuffer);
}
static void new_glClear(GLbitfield mask) {
if (wasFront) {
wasFront = FALSE;
NSLog(@"ThawUp causing CGLFlushDrawable");
CGLFlushDrawable(CGLGetCurrentContext());
}
orig_glClear(mask);
}
static void new_glDrawBuffer(GLenum mode) {
if (mode == GL_FRONT) wasFront = TRUE;
orig_glDrawBuffer(mode);
}
@end
ThawUp.zip