gpt4 book ai didi

cocoa - NSOpenGLView drawRect 没有被调用

转载 作者:行者123 更新时间:2023-12-03 17:30:55 30 4
gpt4 key购买 nike

我目前正在尝试以编程方式创建一个简单的 cocoa 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

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

最佳答案

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

关于cocoa - NSOpenGLView drawRect 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2997046/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com