1

我正在尝试使用 Cocoa 窗口和 NSOpenGLView 的 OpenGL 3.2。但是我无法让 NSOpenGLView 绘制红色。我只是得到一个白色的窗口。这是我的代码(在 NSOpenGLView 的子类中):

-(void)awakeFromNib{

NSOpenGLPixelFormatAttribute attrs[] =
{
    NSOpenGLPFADoubleBuffer,
    NSOpenGLPFADepthSize, 24,
    // Must specify the 3.2 Core Profile to use OpenGL 3.2
    NSOpenGLPFAOpenGLProfile,
    NSOpenGLProfileVersion3_2Core,
    0
};

NSOpenGLPixelFormat *pf = [[[NSOpenGLPixelFormat alloc] initWithAttributes:attrs] autorelease];

if (!pf)
{
    NSLog(@"No OpenGL pixel format");
}


NSOpenGLContext *context = [[[NSOpenGLContext alloc]initWithFormat:pf shareContext:nil]autorelease];

[self setPixelFormat:pf];
[self setOpenGLContext:context];


 }


 - (id)initWithFrame:(NSRect)frame
 {
self = [super initWithFrame:frame];
if (self) {
    // Initialization code here.
}

return self;
 }

 - (void)drawRect:(NSRect)dirtyRect
 {

glClearColor(1.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);

 }

代码应该简单地将视图清除为红色。没有错误或警告——只有一个白色窗口。

4

2 回答 2

1

在调用 glClear() 后,我需要使用 glSwapAPPLE() 交换缓冲区

我在某处读到 NSOpenGLViews 不需要交换,因为它是自动完成的。根据我的经验,我可以说这是完全不真实的。

于 2013-07-23T21:15:20.873 回答
0

您应该使用 CGLFlushDrawable()。像打击:

CGLFlushDrawable([[self openGLContext] CGLContextObj]);
于 2018-07-13T07:33:21.763 回答