NSOpenGLView drawRect不会被调用

mok*_*oka 0 cocoa windowing

我目前正在尝试以编程方式创建一个简单的cocoa NSWindow,而不是使用Interface builder(我有理由这样做).这是一个快速测试:

   int main(int argc, char** argv){     
    NSWindow *mainwin;
    CocoaGLView *mainview;
    NSRect scr_frame;
    unsigned int style_mask;

    NSAutoreleasePool *pool =[[NSAutoreleasePool alloc] init];

    [NSApplication sharedApplication];

    scr_frame= NSMakeRect(100, 100, 400, 400);
    style_mask=NSClosableWindowMask|NSMiniaturizableWindowMask|
    NSResizableWindowMask|NSTitledWindowMask;

    scr_frame=[NSWindow contentRectForFrameRect:scr_frame
                                      styleMask:style_mask];

    mainwin=[[NSWindow alloc]
             initWithContentRect:scr_frame
             styleMask:style_mask
             backing:NSBackingStoreBuffered
             defer:NO];
    [mainwin makeKeyAndOrderFront:nil];
    [mainwin setTitle:@"Visible screen window"];

    mainview=[[CocoaGLView alloc] initWithFrame:scr_frame];
    [mainwin setContentView:mainview];
    [mainview display];

    [mainwin setReleasedWhenClosed:YES];

    [pool drain];
    [NSApp run];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

CocoaGLView派生自NSOpenGLView,如下所示:

    @interface CocoaGLView : NSOpenGLView {
    //some stuff
}

- (id) initWithFrame: (NSRect) frameRect;

- (void)setFrameSize:(NSSize) aSize;
- (void)drawRect:(NSRect) aRect;

@end
Run Code Online (Sandbox Code Playgroud)

它通常有效.我可以看到窗户.我甚至可以看到我在CocoaGLViews drawRect函数中绘制的openGL内容,但该函数不幸只被调用一次,我错过了什么?

JWW*_*ker 5

为什么你会期望它不止一次被调用?当操作系统认为其内容不再有效时,会要求绘制视图.如果您希望定期绘制OpenGL视图,则需要设置一个定时器,将setNeedsDisplay:消息发送到您的视图.