NSOpenGLView drawRect не вызывается

В настоящее время я пытаюсь создать простой какао NSWindow программно вместо использования построителя интерфейса (у меня есть на это причины). это быстрый тест:

   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;
}

CocoaGLView является производным от NSOpenGLView и выглядит следующим образом:

    @interface CocoaGLView : NSOpenGLView {
    //some stuff
}

- (id) initWithFrame: (NSRect) frameRect;

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

@end

это вообще работает. Я вижу окно. Я даже могу видеть вещи openGL, которые я рисую внутри функции DrawRect CocoaGLViews, но эта функция, к сожалению, вызывается только один раз, что мне не хватает?


person moka    schedule 08.06.2010    source источник


Ответы (1)


Почему вы ожидаете, что он будет вызываться более одного раза? Представление запрашивается отрисовкой, когда ОС считает, что его содержимое больше недействительно. Если вы хотите, чтобы представление OpenGL отображалось периодически, вам необходимо настроить таймер, который отправляет сообщения setNeedsDisplay: вашему представлению.

person JWWalker    schedule 08.06.2010