2010-06-08 6 views
0

J'essaye actuellement de créer un simple NSWindow de cacao par programme au lieu d'utiliser le constructeur d'interface (j'ai mes raisons de le faire). ceci est un test rapide:NSOpenGLView drawRect ne se fait pas appeler

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 est dérivé de NSOpenGLView et ressemble à ceci:

@interface CocoaGLView : NSOpenGLView { 
    //some stuff 
} 

- (id) initWithFrame: (NSRect) frameRect; 

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

@end 

cela fonctionne en général. Je peux voir la fenêtre. Je peux même voir les choses openGL que je dessine dans la fonction drawRect de CocoaGLViews, mais cette fonction n'est malheureusement appelée qu'une fois, qu'est-ce qui me manque?

Répondre

4

Pourquoi vous attendez-vous à ce qu'il soit appelé plus d'une fois? Une vue est appelée à dessiner lorsque l'OS pense que son contenu n'est plus valide. Si vous souhaitez que la vue OpenGL soit dessinée périodiquement, vous devez configurer une horloge qui envoie les messages setNeedsDisplay: à votre vue.

Questions connexes